4

私は次のようなxmlを持っています:

<item id="1">
        <items>
            <item id="2">Text2</item>
            <item id="3">Text3</item>
        </items>Text1
</item>

<item id="1">('Text1') の テキストを返すには? <xsl:value-of select="item/text()"/>何も返しません。

私のXSLTは次のとおりです。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <html>
      <body>
         <xsl:apply-templates select="item"/>
     </body>
    </html>
  </xsl:template>

  <xsl:template match="item">
     <xsl:value-of select="text()"/>
  </xsl:template>
</xsl:stylesheet>

編集をコミットするために他に何を入力すればよいかわかりません

4

2 に答える 2

5

<item id="1">('Text1') のテキストを返すには? <xsl:value-of select="item/text()"/>何も返しません。

item要素には複数の text-node の子があり、そのうちの最初の子はたまたますべて空白の子です。これが「何も表示されない」理由です。

ノードの文字列値がすべて空白でないかどうかをテストする 1 つの方法は、normalize-space()関数を使用することです。

単一の Xpath 式では、次のようにします

/*/text()[normalize-space()][1]

以下は、目的のテキスト ノードが得られる完全な変換です。

<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:copy-of select="text()[normalize-space()][1]"/>
 </xsl:template>
</xsl:stylesheet>

この変換が提供された XML ドキュメントに適用されると、次のようになります。

<item id="1">
        <items>
            <item id="2">Text2</item>
            <item id="3">Text3</item>
        </items>Text1
</item>

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

Text1
于 2013-04-21T23:13:40.197 に答える