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元素有多个文本节点子节点,其中第一个恰好是全空白节点——这就是你得到“无”的原因。

测试节点的字符串值是否不是全空白的一种方法是使用该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 回答
2

这通常应该有效:

<xsl:apply-templates select="item/text()" />

合并到您的 XSLT 中:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:key name="item_key" match="item" use="."/>
  <xsl:strip-space elements="*" />

  <xsl:template match="/">
    <html>
      <body>
        <ul>
          <xsl:apply-templates select="item"/>
        </ul>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="item">
    <li>
      <xsl:apply-templates select="text()"/>
    </li>
  </xsl:template>
</xsl:stylesheet>

在您的示例输入上运行时,结果是:

<html>
  <body>
    <ul>
      <li>Text1
</li>
    </ul>
  </body>
</html>

或者,这也应该有效:

<xsl:copy-of select="item/text()" />
于 2013-04-21T19:04:48.830 回答