XSL 转换器不会选择具有相对路径的标记值



我在从 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>&#xa;</xsl:text>
      <WANTED_DELIVERY_DATE>
            <xsl:value-of select="//order/additionalDate" />
      </WANTED_DELIVERY_DATE>
      <xsl:text>&#xa;</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>

请注意,我将 messageorder 的命名空间绑定到前缀(msgdoc )。(您可以使用不同的前缀,只要 URI 相同。

另请注意,additionalDate不需要前缀,因为它位于空命名空间中。

有关命名空间的详细信息,请查看:

  • https://www.w3.org/TR/xml-names/
  • http://www.jclark.com/xml/xmlns.htm

相关内容

  • 没有找到相关文章

最新更新