我正在将xml文件导入Access,并使用xslt文件转换文件以包含每个部分的orderNumber。不确定正确的用语。 在下面的代码中,我获取了为项目添加的字段和orderNumber,以及其他部分的字段,shippingAddress,payment等。
我不太明白我是否需要进行更改才能将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 :(得分:0)
<orderNumber>
元素是<billingAddress>
,<shippingAddress>
,<payment>
的兄弟,但高于<items>
。因此,您的上下文级别指令../../
仅适用于<item>
节点。
简单地替换:
<xsl:value-of select="../../orderNumber"/>
使用公共表达式<order>
是所有必需节点的祖先:
<xsl:value-of select="ancestor::order/orderNumber"/>