如何在没有子节点值的情况下获得元素值?
例如
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"/>
,但实际的规则集取决于源文档中可能找到的所有内容,而不是这个示例中存在的内容。