2

これが非常に初心者であることは知っていますが、コードが機能しない理由がわかりません。XML スニペットは次のとおりです。

<root>
  <cookies>
    <lastviewedentityname>Category</lastviewedentityname>
    <lastviewedentityinstanceid>72</lastviewedentityinstanceid>
    <lastviewedentityinstancename>Fall Florals</lastviewedentityinstancename>
    some random text bla bla
  </cookies>
  <QueryString>
    <categoryid>34</categoryid>
  </QueryString>
  <!-- other nodes -->
</root>

XSL スニペットは次のとおりです。

<?xml version="1.0" standalone="yes" ?>
<package version="2.1" displayname="Categories" debug="false" includeentityhelper="true">
  <PackageTransform>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ise="urn:ise" exclude-result-prefixes="ise">
        <xsl:output method="html" omit-xml-declaration="yes"/>

            <!-- other code -->

            <xsl:value-of select="/root/cookies/lastviewedentityinstanceid"/>

            <!-- other code -->

    </xsl:stylesheet>
  </PackageTransform>
</package>

私が探している結果は

72

しかし、空の文字列か何かを取得しているようです。これを見る: http://www.w3schools.com/xsl/xsl_value_of.asp、私のコードは大丈夫だと思います。また、これを確認すると、このコードは次のとおりです。

<xsl:value-of select="/root/QueryString/categoryid"/>

正しい値を教えてくれます

34

次に、答えを見つけようとして、次のサイトを見つけました: http://www.mizar.dk/XPath/Default.aspxここで試してみると、要素内の値ではなく、要素が強調表示されていることに気付きました: http: //screencast.com/t/NXuNiCHbEd0T

ここにいくつかの詳細情報があります: 私が取り組んでいるシステムは Interprise Suite Ecommerce と呼ばれています (これが "ise" の由来です)。Interprise Suite と呼ばれる ERP ソフトウェアと統合するのは、同社の Web ソフトウェアです。少し前に AspDotNetStoreFront から適応された e コマース ソフトウェアを ISE します。私が持っている限られた知識を説明しようとします。

読み込まれているページは、製品またはカテゴリのページです。私が取り組んでいるこの特定のファイルは、サイドバーの製品ナビゲーション メニューのレイアウトを提供します。ファイルの名前は rev.categories.xml.config です。このファイルには XSLT コードが含まれています。それが変換している元の XML データです。どこから来たのかわからず、アクセスすることもできません。前の質問で Dimitre の助けを借りて、Web ページで XML データを再現することができたので、もう少し理解することができました。その出力では、最上位ノードは

<root>

この XML パッケージをロードするファイルは、template.ascx と呼ばれます。テンプレートまたは「マスター」ファイルです。ASPDNSF では、「トークン」と呼ばれるものを使用してページに読み込みます。このトークンは、rev.categories.xml.config を呼び出してアクティブ化し、その処理を行うものです。トークンは次のようになります。

(!XmlPackage Name="rev.categories"!)

トークンがどのように機能するかわかりません。私の考えでは、この 1 行のコードを除いて、このファイル内の他のすべてが機能しているため、関連性がないと考えていました。

知識、経験、適切な言葉遣いが不足していることをお許しください。

編集: ここに rev.categories.xml.confg の完全なコードへのリンクがあります。 http://jsfiddle.net/v5cNM/

4

1 に答える 1

1

埋め込みスタイルシートをサポートする XSLT プロセッサは、あるとしてもごくわずかです (私はそのようなことは知りません)

XML ドキュメントに変換を適用するための、広くサポートされている正しい方法は、XSLT スタイルシートを別の XML ドキュメント (通常は独自のファイル内) に配置することです。

<xsl:stylesheet>(またはその同義語xsl:transform) は、スタイルシートの先頭要素でなければなりません。

この変換(独自のファイルを占有):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:value-of select=
  "/root/cookies/lastviewedentityinstanceid"/>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<root>
  <cookies>
    <lastviewedentityname>Category</lastviewedentityname>
    <lastviewedentityinstanceid>72</lastviewedentityinstanceid>
    <lastviewedentityinstancename>Fall Florals</lastviewedentityinstancename>
    some random text bla bla
  </cookies>
  <!-- other nodes -->
</root>

必要な正しい結果が生成されます

72
于 2012-09-09T22:53:47.230 に答える