2016-06-23 110 views
0

我正在將xml文件導入Access,並使用xslt文件轉換文件以包含每個節的orderNumber。不確定適當的名詞。 在下面的代碼中,我得到的項目添加了字段和orderNumber,並且只爲其他部分,shippingAddress,付款等字段。轉換xslt不轉換所有元素

我不太明白是否需要進行更改才能獲取orderNumber的數據添加到字段中。

任何幫助將不勝感激。

格雷格

這是我給什麼樣的工作。

<?xml version="1.0" encoding="UTF-8"?> 
-<orders xmlns:php="http://php.net/xsl"> 
-<order> 
     <orderNumber>100000379</orderNumber> 
-<billingAddress> 
      <company>Acme</company> 
      <name>John Doe</name> 
      <address1>59 Any St</address1> 
      <address2/> 
      <city>New York</city> 
      <state>NY</state> 
      <zip>10013-4020</zip> 
      <country>US</country> 
      <phone>212-555-1212</phone> 
     </billingAddress> 
-<shippingAddress> 
      <company>Acme</company> 
      <name>John Doe</name> 
      <address1>59 Any St</address1> 
      <address2/> 
      <city>New York</city> 
      <state>NY</state> 
      <zip>10013-4020</zip> 
      <country>US</country> 
      <phone>212-555-1212</phone> 
     </shippingAddress> 
     <createdOn>2016-06-22 14:38:06</createdOn> 
     <shipMethod>ups_GND</shipMethod> 
     <shipDescription>United Parcel Service - Ground</shipDescription> 
-<payment> 
      <tax>0</tax> 
      <shipmentCost>26.76</shipmentCost> 
      <subtotalExclTax>1616</subtotalExclTax> 
      <subtotalInclTax>1616</subtotalInclTax> 
      <discount>0</discount> 
      <grandTotal>1642.76</grandTotal> 
      <paymentMethod>purchaseorder</paymentMethod> 
     </payment> 
-<items> 
-<item> 
       <itemId>645</itemId> 
       <productId>171</productId> 
       <sku>12749</sku> 
       <qty>1</qty> 
       <price>858</price> 
       <tax>0</tax> 
       <itemTotal>858</itemTotal> 
      </item> 
-<item> 
       <itemId>646</itemId> 
       <productId>178</productId> 
       <sku>127478</sku> 
       <qty>1</qty> 
       <price>758</price> 
       <tax>0</tax> 
       <itemTotal>758</itemTotal> 
      </item> 
     </items> 
    </order> 
</orders> 

這是xslt代碼。我發現這是一個例子,但我似乎無法使它工作。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <dataroot> 
     <xsl:apply-templates select="@*|node()"/> 

    </dataroot> 
</xsl:template> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 

    </xsl:copy> 
</xsl:template> 

<xsl:template match="billingAddress"> 
    <billingAddress> 
     <orderNumber><xsl:value-of select="../../orderNumber"/></orderNumber> 
     <xsl:apply-templates select="node()"/> 
    </billingAddress> 
</xsl:template> 

<xsl:template match="shippingAddress"> 
    <shippingAddress> 
     <orderNumber><xsl:value-of select="../../orderNumber"/></orderNumber> 
     <xsl:apply-templates select="node()"/> 
    </shippingAddress> 
</xsl:template> 

<xsl:template match="payment"> 
    <payment> 
     <orderNumber><xsl:value-of select="../../orderNumber"/></orderNumber> 
     <xsl:apply-templates select="node()"/> 
    </payment> 
</xsl:template> 

<xsl:template match="items"> 
    <xsl:apply-templates select="@*|node()"/> 
</xsl:template> 

<xsl:template match="item"> 
    <item> 
     <orderNumber><xsl:value-of select="../../orderNumber"/></orderNumber> 
     <xsl:apply-templates select="@*|node()"/> 
    </item> 
</xsl:template> 

+0

芭菲,非常感謝你。每天學些新東西。 – Greg

回答

0

<orderNumber>元件是<billingAddress><shippingAddress><payment>同級但高於<items>的水平。所以你的上下文級指令../../只適用於<item>節點。

只需更換:

<xsl:value-of select="../../orderNumber"/> 

與常見的表現爲<order>是祖先給所有需要的節點:

<xsl:value-of select="ancestor::order/orderNumber"/>