XSL 获取元素值并忽略嵌套元素
XSL get the element value and ignore the nested element
如何只获取元素值而不获取子节点值?
例如
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>
输出为:“父值子值”
我只想显示“父值”
有什么建议吗?
谢谢!
<xsl:value-of select="text()"/>
为您提供上下文节点的所有子文本节点的值,所以我不确定您为什么需要命名模板,我会在上下文中使用 <xsl:value-of select="text()"/>
a
元素,即 for-each
内部。 value-of
采用默认为单个 space.
的分隔符属性
使用其中之一:
<xsl:value-of select="$elem/text()"/>
或:
<xsl:value-of select="$elem/text()[1]"/>
取决于您是想获取作为 a
子节点的所有文本节点的值,还是仅获取其中第一个节点的值。
您向我们展示了一个测试用例以及该测试用例的预期输出,但您没有解释一般问题:样式表必须处理哪些其他输入,以及一般规则是什么申请。
仅靠猜测,我的猜测是正确的解决方案是使用模板规则。类似于:
<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"/>
但实际的规则集取决于可能在源文档中找到的所有内容,而不是本示例中出现的内容。
如何只获取元素值而不获取子节点值?
例如
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>
输出为:“父值子值” 我只想显示“父值”
有什么建议吗?
谢谢!
<xsl:value-of select="text()"/>
为您提供上下文节点的所有子文本节点的值,所以我不确定您为什么需要命名模板,我会在上下文中使用 <xsl:value-of select="text()"/>
a
元素,即 for-each
内部。 value-of
采用默认为单个 space.
使用其中之一:
<xsl:value-of select="$elem/text()"/>
或:
<xsl:value-of select="$elem/text()[1]"/>
取决于您是想获取作为 a
子节点的所有文本节点的值,还是仅获取其中第一个节点的值。
您向我们展示了一个测试用例以及该测试用例的预期输出,但您没有解释一般问题:样式表必须处理哪些其他输入,以及一般规则是什么申请。
仅靠猜测,我的猜测是正确的解决方案是使用模板规则。类似于:
<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"/>
但实际的规则集取决于可能在源文档中找到的所有内容,而不是本示例中出现的内容。