Xml 使用XSLT/XPATH仅提取一个文本节点
我在底部有一个xml示例,其中有几个Xml 使用XSLT/XPATH仅提取一个文本节点,xml,xslt,xpath,Xml,Xslt,Xpath,我在底部有一个xml示例,其中有几个元素,每个元素都有子sku元素。我只想提取元素的文本节点 我在XSLT中尝试了下面的XPATH,但没有一个得到390500作为输出。它们最终都会读取文件中的每个文本节点 <xsl:template match="offer[sku/text()]"> <xsl:value-of select="./text()"/> </xsl:template> <xsl:template match="offer/sku
元素,每个元素都有子sku元素。我只想提取元素的文本节点
我在XSLT中尝试了下面的XPATH,但没有一个得到390500作为输出。它们最终都会读取文件中的每个文本节点
<xsl:template match="offer[sku/text()]">
<xsl:value-of select="./text()"/>
</xsl:template>
<xsl:template match="offer/sku">
<xsl:for-each select="sku">
<xsl:value-of select="sku"/>
</xsl:for-each>
</xsl:template>
XML
1.
1.
390500
1573
1.
1.
美国
Y
001
03
1573
258
应该可以做到这一点
请注意,如果使用XSLT,整个文档仍将标记化并放入RAM中。XPath表达式
//offer/sku/text()
选择所有offer
元素的所有sku
子元素的文本
> xmllint --xpath '//offer/sku/text()' ~/net/test.xml
390500
请注意,您的原始文档包含一个默认名称空间,您需要以适当的方式处理该名称空间,具体取决于您使用的工具。否则,所选XPath集将为空。在命名空间中显示包含元素的复杂XML,然后显示没有任何命名空间上下文的XSLT片段没有多大意义。您是否使用XSLT 2或3并设置了
xpath默认名称空间
?或者,您希望模板如何匹配。如果“有多个元素,每个元素都有子sku”,您希望从中提取sku
元素的内容?您想要的结果是什么,您想用XSLT创建哪种输出类型(text
,xml
,(x)html
)?“请注意,如果使用XSLT,整个文档仍将标记化并放入RAM”:在XSLT 3的流式处理中,您可以避免这种情况,例如,根据需要使用xsl:iterate
和xsl:break
。
> xmllint --xpath '//offer/sku/text()' ~/net/test.xml
390500