我在底部有一个xml示例,其中有几个<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
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<enfinity xmlns='http://www.intershop.com/xml/ns/enfinity/7.1/xcs/impex' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xml='http://www.w3.org/XML/1998/namespace' xmlns:dt='http://www.intershop.com/xml/ns/enfinity/6.5/core/impex-dt' xsi:schemaLocation="http://www.intershop.com/xml/ns/enfinity/7.1/xcs/impex catalog.xsd http://www.intershop.com/xml/ns/enfinity/6.5/core/impex-dt dt.xsd" major="6" minor="1" family="enfinity" branch="enterprise" build="build" >
<offer sku="390500" >
<available>1</available>
<online>1</online>
<product-type name="Basic" domain="system" ></product-type>
<sku>390500</sku>
<tax-class id="FullTax" ></tax-class>
<supplier>
<supplier-name>1573</supplier-name>
<supplier-sku/>
</supplier>
<quantity unit="Piece" >
<step-quantity>1</step-quantity>
<price-quantity>1</price-quantity>
</quantity>
<custom-attributes>
<custom-attribute name="Country" dt:dt="string" >
<value>US</value>
</custom-attribute>
<custom-attribute name="LICENSED" dt:dt="string" >
<value>Y</value>
</custom-attribute>
<custom-attribute name="LeadTime" dt:dt="string" >
<value>001</value>
</custom-attribute>
<custom-attribute name="LifeCycle" dt:dt="string" >
<value>03</value>
</custom-attribute>
<custom-attribute name="SalesOrganization" dt:dt="string" >
<value>1573</value>
</custom-attribute>
</custom-attributes>
<offered-product sku="390500" domain="LBS-LBSUS" ></offered-product>
<type-code>258</type-code>
</offer>
</enfinity>
答案 0 :(得分:1)
XPath表达式//offer/sku/text()
选择所有sku
元素的所有offer
子元素的文本。
> xmllint --xpath '//offer/sku/text()' ~/net/test.xml
390500
请注意,原始文档包含默认名称空间,您需要根据所使用的工具以适当的方式处理该名称空间。否则,所选XPath集将为空。
答案 1 :(得分:0)
<xsl:value-of select="/enfinity/offer[1]/sku[1]"/>
应该可以解决问题。
请注意,如果您使用XSLT,则整个文档仍将被标记并放入RAM。