Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用XSLT/XPATH仅提取一个文本节点_Xml_Xslt_Xpath - Fatal编程技术网

Xml 使用XSLT/XPATH仅提取一个文本节点

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

我在底部有一个xml示例,其中有几个
元素,每个元素都有子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