2016-12-09 6 views
0

XSLTでIFというデモを行います。
idnode idに一致する場合は、textを印刷したいと思います。私はここからドキュメントをお読みください。IF条件がXSLTで予期しない結果をもたらすのはなぜですか?

https://msdn.microsoft.com/en-us/library/ms256209(v=vs.110).aspx

私はxsl:if構文を使用しました。しかし、それは<p>タグ値を印刷していません。
これはXSLTTransform for my problemへのリンクです。私はjjj書籍ID番号 'BK101' を見せたい

<?xml version="1.0" encoding="UTF-8"?> 
<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look at creating applications with 
      XML.</description> 
    </book> 
    <book id="bk102"> 
     <author>Ralls, Kim</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen of the 
      world.</description> 
    </book> 
    <book id="bk103"> 
     <author>Corets, Eva</author> 
     <title>Maeve Ascendant</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-11-17</publish_date> 
     <description>After the collapse of a nanotechnology society 
      in England, the young survivors lay the foundation for a new 
      society.</description> 
    </book> 
</catalog> 

は、そして、これは私のXMLファイルです。

そして、これは私のXSLTコードです:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="book"> 
      <xsl:if test="@id =bk101"> 
       <p>jjj</p> 
      </xsl:if> 
    </xsl:template>  
</xsl:stylesheet> 

しかし、期待どおりに動作していません。

答えて

3

book要素のid属性が「BK101」の値に一致するすべてのbookのノードを選択するための正しいXPath式は、だから、完全なXSLTテンプレートは次のようになり

book[@id='bk101'] 

です:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="book[@id='bk101']"> 
    <p>jjj</p> 
    </xsl:template>  
</xsl:stylesheet> 
+0

条件付きで申請できますか? – user5711656

+0

もちろんif-conditionを適用することができます。しかし、述語は短くなります。必要に応じて、述語を ''に転送することができます。 '

jjj

'のようになります。しかし、それを使用して複雑にしているのは何ですか? – zx485

+0

私の例で同じシンテックスを使用していて、なぜ動作していないのでしょうか? – user5711656

1

@ zx485は、述語がおそらくほとんどの場合に必要なものに近い動作を生成するということは正しいです。

あなたのxsl:if式は1つの変更で動作します。現在のコードには、次のテストが含まれています。

これが正しく動作しないようにする重要な問題は、引用符ではなく引用符がないことです。

はあなたのtestは、上記の葉bk101引用符で囲まれていない - ので、XPathエンジンは、要素名としてこれを識別するので、あなたは、存在しない要素bk101の値に対して属性idの値を比較する羽目になる。 bk101を引用符で囲む必要があるため、XPathエンジンでこれを文字列として評価するようにしてください。 (二重引用符はtest式を定義すると、構文の衝突を避けるために、ここでは単一引用符を使用してください。)固定回線は次のようになります。あなたと同じコードを実行

<xsl:if test="@id = 'bk101'"> 

、で、単一引用符を追加するために改訂あなたのサンプル入力ファイルのクイックダーティトランスフォームは、私のためにこの出力を生成します:

<?xml version="1.0" encoding="UTF-8"?> 
<p>jjj</p> 
関連する問題