XSL获取元素值并忽略嵌套元素



如何在没有子节点值的情况下获得元素值?

例如

XML

<root>
<a>
parent value
<b>
child value
</b> 
</a>
</root>

XSL

<xsl:for-each select="a">
<xsl:call-template name="foo">
<xsl:with-param name="elem" select="." />
</xsl:call-template>
</xsl:for-each>
<xsl:template name="foo">
<xsl:param name="elem" />

<i>Val: <xsl:value-of select="$elem"/></i>
</xsl:template>

输出为:"parent value" child value"我只想显示&;父值&;

有什么建议吗?

谢谢!

使用:

<xsl:value-of select="$elem/text()"/>

或:

<xsl:value-of select="$elem/text()[1]"/>

取决于您是想获取a子节点的所有文本节点的值,还是只获取其中的第一个文本节点的值。

<xsl:value-of select="text()"/>为您提供上下文节点的所有子文本节点的值,因此我不确定为什么您需要一个命名模板,我会在a元素的上下文中使用<xsl:value-of select="text()"/>,即在您的for-each中。value-of接受一个分隔符属性,默认为一个空格。

您已经向我们展示了一个测试用例以及该测试用例的预期输出,但是您还没有解释一般问题:样式表必须处理哪些其他输入,以及要应用的一般规则是什么。

仅凭猜测,我的猜测是正确的解决方案是使用模板规则。比如:

<xsl:template match="a">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="a/text()">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="a/b"/>

,但实际的规则集取决于源文档中可能找到的所有内容,而不是这个示例中存在的内容。

最新更新