我在从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的值和order tag的属性documentNumber的值。我尝试过使用下面的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>
但它只为我提供了两个空标签。
这可能是什么问题?
谢谢...
答案 0 :(得分:2)
您的问题是您没有考虑默认名称空间(没有前缀声明的名称空间)。
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
不需要前缀,因为它位于空命名空间中。
有关名称空间的更多信息,请查看: