我在从 XSL 转换器中选择 XML 值时遇到问题。我正在转换的 XML 如下所示。
<?xml version="1.0" encoding="utf-8"?>
<message creationDateTime="2012-12-31T12:25:21Z" id="20121231122504.f555357c-bcc1-483d-93ea-29551a2dc52f" xmlns="urn:netdocs:schemas:message">
<sender xmlns="">
<id entityIdTypeCoded="GLN">5600000000427</id>
<addressInformation>
<countryCode>PT</countryCode>
</addressInformation>
</sender>
<receiver xmlns="">
<id entityIdTypeCoded="GLN">560000001XXXX</id>
<addressInformation>
<countryCode>PT</countryCode>
</addressInformation>
</receiver>
<order documentNumber="000123285849" documentDate="2012-12-31" schemaVersion="1.0" xmlns="urn:netdocs:schemas:document">
<seller xmlns="">
<id entityIdTypeCoded="GLN">560000001XXXX</id>
<name>TUDO BEM SA</name>
<addressInformation>
<address></address>
<city></city>
<postalCode>
<zip></zip>
<area></area>
</postalCode>
<countryCode>PT</countryCode>
</addressInformation>
</seller>
<buyer xmlns="">
<id entityIdTypeCoded="GLN">5600000022078</id>
<name>ENT. ALV FARMACIA</name>
<addressInformation>
<address></address>
<city></city>
<postalCode>
<zip></zip>
<area></area>
</postalCode>
<countryCode>PT</countryCode>
</addressInformation>
</buyer>
<billTo xmlns="">
<id entityIdTypeCoded="GLN">5600000000403</id>
<name>Modelo Continente Hipermercados, SA </name>
<addressInformation>
<address></address>
<city></city>
<postalCode>
<zip></zip>
<area></area>
</postalCode>
<countryCode>PT</countryCode>
</addressInformation>
</billTo>
<shipTo xmlns="">
<id entityIdTypeCoded="GLN">5600000022078</id>
<name>ENT. ALV FARMACIA</name>
<addressInformation>
<address></address>
<city></city>
<postalCode>
<zip></zip>
<area></area>
</postalCode>
<countryCode>PT</countryCode>
</addressInformation>
</shipTo>
<additionalDate type="DELIVERY" xmlns="">2013-01-03T10:30:00</additionalDate>
<currencyCode xmlns="">EUR</currencyCode>
<lineItem number="1" xmlns="">
<gtinCode>0083800004XXX</gtinCode>
<buyerItemCode>3798XXX</buyerItemCode>
<description>PRODUTO XX 2X6L</description>
<quantity>
<value>80</value>
<unitOfMeasure>EA</unitOfMeasure>
</quantity>
<netUnitPrice>0.00</netUnitPrice>
<quantityOfPackages>
<value>80</value>
<packageType>BX</packageType>
<quantityPerPackage>96</quantityPerPackage>
</quantityOfPackages>
<vatPercentage>23</vatPercentage>
<netAmount>0</netAmount>
</lineItem>
<lineItem number="2" xmlns="">
<gtinCode>0083800004XXX</gtinCode>
<buyerItemCode>3798XXX</buyerItemCode>
<description>PRODUTO XX 2X6ML</description>
<quantity>
<value>80</value>
<unitOfMeasure>EA</unitOfMeasure>
</quantity>
<netUnitPrice>0.00</netUnitPrice>
<quantityOfPackages>
<value>10</value>
<packageType>BX</packageType>
<quantityPerPackage>96</quantityPerPackage>
</quantityOfPackages>
<vatPercentage>23</vatPercentage>
<netAmount>0</netAmount>
</lineItem>
</order>
</message>
我正在尝试获取//order/additionalDate 的值和属性文档的值订单标签的数量。我尝试使用以下 XSLT。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:me="urn:netdocs:schemas:message" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="text()" />
<xsl:template match="/">
<xsl:text>
</xsl:text>
<WANTED_DELIVERY_DATE>
<xsl:value-of select="//order/additionalDate" />
</WANTED_DELIVERY_DATE>
<xsl:text>
</xsl:text>
<CUSTOMER_PO_NO>
<xsl:value-of select="//order/@documentNumber" />
</CUSTOMER_PO_NO>
</xsl:template>
</xsl:stylesheet>
但它只为我提供了两个空标签。
这里可能有什么问题?
谢谢。。。
您的问题是您没有考虑默认命名空间(声明的没有前缀的命名空间)。
order
位于命名空间urn:netdocs:schemas:document
(称为命名空间 URI)中。
additionalDate
位于空命名空间中。
尝试这样的事情:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msg="urn:netdocs:schemas:message"
xmlns:doc="urn:netdocs:schemas:document"
exclude-result-prefixes="msg doc">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/msg:message">
<WANTED_DELIVERY_DATE>
<xsl:value-of select="doc:order/additionalDate" />
</WANTED_DELIVERY_DATE>
<CUSTOMER_PO_NO>
<xsl:value-of select="doc:order/@documentNumber" />
</CUSTOMER_PO_NO>
</xsl:template>
</xsl:stylesheet>
请注意,我将 message
和 order
的命名空间绑定到前缀(msg
和 doc
)。(您可以使用不同的前缀,只要 URI 相同。
另请注意,additionalDate
不需要前缀,因为它位于空命名空间中。
有关命名空间的详细信息,请查看:
- https://www.w3.org/TR/xml-names/
- http://www.jclark.com/xml/xmlns.htm