XSLT:输出值,但不获取子节点的值

时间:2019-01-19 11:13:08

标签: xml xslt

我有此源XML:

<th>2018-Feb</th>

当我使用该功能时:

<th>Feb</th>

我得到下一个输出:ESPEU和y只想拥有ESP。

如何从特定节点<Book> <Title>Harry Potter</Title> <editorial>M<previous>Sort</previous></editorial> <languaje>ESP<previous>EU</previous></languaje> <nationality>ESP</nationality> </Book> 删除所有值?

感谢所有人

1 个答案:

答案 0 :(得分:0)

您的表情

<xsl:value-of select="Book/languaje"/>

选择languaje元素的所有文本内容,其中包含

  1. 一个text()节点和
  2. 具有previous节点本身的text()元素
  3. 和另一个text()节点

您可能想要text()[1]节点(1)和text()[2](3)。


如果您可以使用 XSLT-2.0 或更高版本,则只需使用xsl:value的高级功能(可以选择使用分隔符)来完成,即可处理多个值一次:

<xsl:value-of select="Book/languaje/text()" />

如果您只能使用 XSLT-1.0 ,因此只能使用XPath-1.0,则xsl:value一次只能处理一个值。但是您至少有三种可能性:

  1. text()元素的languaje节点上循环:

    <xsl:for-each select="Book/languaje/text()">
        <xsl:value-of select="."/>
    </xsl:for-each>
    
  2. 在所有languaje的{​​{1}}节点上应用标准模板:

    text()
  3. 将标准模板与<xsl:apply-templates select="Book/languaje/text()" /> 元素的空模板结合应用于languaje元素:

    previous

这三种方法的输出应相同:

  <xsl:apply-templates select="Book/languaje" />

<!-- And on the template level the following -->  
<xsl:template match="languaje/previous" />