Xml 在ASP.C中使用XSL样式表将父节点复制/移动到子节点
给定以下XML,我想向xsl文件添加将Xml 在ASP.C中使用XSL样式表将父节点复制/移动到子节点,xml,xslt,asp-classic,Xml,Xslt,Asp Classic,给定以下XML,我想向xsl文件添加将节点移动/复制到其关联的父节点中每个节点的子节点的功能。因此,基本上它应该按日期排序,就像XSL和move/copy中一样。 我不知道如何做到这一点。我所有的尝试都接近成功,但都失败了 启动XML <xmldata> <Orders> <OrderID>87709</OrderID> <CustomerID>123456</CustomerID>
节点移动/复制到其关联的
父节点中每个
节点的子节点的功能。因此,基本上它应该按日期排序,就像XSL和move/copy中一样。
我不知道如何做到这一点。我所有的尝试都接近成功,但都失败了
启动XML
<xmldata>
<Orders>
<OrderID>87709</OrderID>
<CustomerID>123456</CustomerID>
<OrderDate>10/30/2012 3:02:00 PM</OrderDate>
<PaymentMethodID>5</PaymentMethodID>
<PONum></PONum>
<ShippingMethodID>502</ShippingMethodID>
<OrderDetails>
<OrderDetailID>25676</OrderDetailID>
<OrderID>87709</OrderID>
<ProductCode>58309-SYL</ProductCode>
<ProductID>9756</ProductID>
<ProductName>ABCD</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>300</Quantity>
<TotalPrice>1425.0000</TotalPrice>
</OrderDetails>
<OrderDetails>
<OrderDetailID>25677</OrderDetailID>
<OrderID>87709</OrderID>
<ProductCode>ABCDEFG</ProductCode>
<ProductID>9757</ProductID>
<ProductName>XYZ 2</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>300</Quantity>
<TotalPrice>1425.0000</TotalPrice>
</OrderDetails>
</Orders>
<Orders>
<OrderID>84757</OrderID>
<CustomerID>123456</CustomerID>
<OrderDate>10/30/2012 3:02:00 PM</OrderDate>
<PaymentMethodID>5</PaymentMethodID>
<PONum></PONum>
<ShippingMethodID>141</ShippingMethodID>
<OrderDetails>
<OrderDetailID>21472</OrderDetailID>
<OrderID>84757</OrderID>
<ProductCode>58309</ProductCode>
<ProductID>9756</ProductID>
<ProductName>XYZ 12V</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>160</Quantity>
<TotalPrice>760.0000</TotalPrice>
</OrderDetails>
</Orders>
<Orders>
next Order...
</Orders>
</xmldata>
87709
123456
2012年10月30日下午3:02:00
5.
502
25676
87709
58309-SYL
9756
ABCD
4.7500
300
1425
25677
87709
ABCDEFG
9757
XYZ 2
4.7500
300
1425
84757
123456
2012年10月30日下午3:02:00
5.
141
21472
84757
58309
9756
XYZ 12V
4.7500
160
760
下一个订单。。。
和下面的XSL
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xmldata>
<xsl:for-each select="//Orders">
<xsl:sort select="substring-before(substring-after(substring-after(OrderDate,'/'),'/'),' ')" data-type="number" order="descending"/> <!-- year -->
<xsl:sort select="substring-before(OrderDate,'/')" data-type="number" order="descending"/> <!-- month -->
<xsl:sort select="substring-before(substring-after(OrderDate,'/'),'/')" data-type="number" order="descending"/> <!-- day -->
<xsl:copy-of select="."/>
</xsl:for-each>
</xmldata>
</xsl:template>
</xsl:stylesheet>
转换的XML
<xmldata>
<Orders>
<OrderID>84757</OrderID>
<CustomerID>123456</CustomerID>
<PaymentMethodID>5</PaymentMethodID>
<PONum></PONum>
<ShippingMethodID>141</ShippingMethodID>
<OrderDetails>
<OrderDate>6/13/2013 5:08:00 PM</OrderDate>
<OrderDetailID>21472</OrderDetailID>
<OrderID>84757</OrderID>
<ProductCode>58309</ProductCode>
<ProductID>9756</ProductID>
<ProductName>XYZ 12V</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>160</Quantity>
<TotalPrice>760.0000</TotalPrice>
</OrderDetails>
</Orders>
<Orders>
<OrderID>87709</OrderID>
<CustomerID>123456</CustomerID>
<PaymentMethodID>5</PaymentMethodID>
<PONum></PONum>
<ShippingMethodID>502</ShippingMethodID>
<OrderDetails>
<OrderDate>10/30/2012 3:02:00 PM</OrderDate>
<OrderDetailID>25676</OrderDetailID>
<OrderID>87709</OrderID>
<ProductCode>58309-SYL</ProductCode>
<ProductID>9756</ProductID>
<ProductName>ABCD</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>300</Quantity>
<TotalPrice>1425.0000</TotalPrice>
</OrderDetails>
<OrderDetails>
<OrderDate>10/30/2012 3:02:00 PM</OrderDate>
<OrderDetailID>25677</OrderDetailID>
<OrderID>87709</OrderID>
<ProductCode>ABCDEFG</ProductCode>
<ProductID>9757</ProductID>
<ProductName>XYZ 2</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>300</Quantity>
<TotalPrice>1425.0000</TotalPrice>
</OrderDetails>
</Orders>
<Orders>
next Order...
</Orders>
</xmldata>
84757
123456
5.
141
2013年6月13日下午5:08:00
21472
84757
58309
9756
XYZ 12V
4.7500
160
760
87709
123456
5.
502
2012年10月30日下午3:02:00
25676
87709
58309-SYL
9756
ABCD
4.7500
300
1425
2012年10月30日下午3:02:00
25677
87709
ABCDEFG
9757
XYZ 2
4.7500
300
1425
下一个订单。。。
以下XSLT样式表:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<!-- The identity transform. -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- When we reach the xmlData element, copy it and select its Order children by reverse date order. -->
<xsl:template match="xmldata">
<xsl:copy>
<xsl:apply-templates select="Orders">
<!-- year -->
<xsl:sort select="substring-before(substring-after(substring-after(OrderDate,'/'),'/'),' ')"
data-type="number"
order="descending"/>
<!-- month -->
<xsl:sort select="substring-before(OrderDate,'/')"
data-type="number"
order="descending"/>
<!-- day -->
<xsl:sort select="substring-before(substring-after(OrderDate,'/'),'/')"
data-type="number"
order="descending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<!-- Copy out the Orders element and its children, except for OrderDate. -->
<xsl:template match="Orders">
<xsl:copy>
<xsl:apply-templates select="node()[not(self::OrderDate)]|@*"/>
</xsl:copy>
</xsl:template>
<!-- Copy out the OrderDetails element and its children, adding the OrderDate for the Order. -->
<xsl:template match="OrderDetails">
<xsl:copy>
<xsl:copy-of select="../OrderDate"/>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当应用于此输入XML时(基于您的示例,但我更改了其中一个日期和订单顺序,以便排序更加明显):
84757
123456
2012年10月30日下午3:02:00
5.
141
21472
84757
58309
9756
XYZ 12V
4.7500
160
760
87709
123456
2013年6月13日下午5:08:00
5.
502
25676
87709
58309-SYL
9756
ABCD
4.7500
300
1425
25677
87709
ABCDEFG
9757
XYZ 2
4.7500
300
1425
生成以下输出XML:
<xmldata>
<Orders>
<OrderID>87709</OrderID>
<CustomerID>123456</CustomerID>
<PaymentMethodID>5</PaymentMethodID>
<PONum />
<ShippingMethodID>502</ShippingMethodID>
<OrderDetails>
<OrderDate>6/13/2013 5:08:00 PM</OrderDate>
<OrderDetailID>25676</OrderDetailID>
<OrderID>87709</OrderID>
<ProductCode>58309-SYL</ProductCode>
<ProductID>9756</ProductID>
<ProductName>ABCD</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>300</Quantity>
<TotalPrice>1425.0000</TotalPrice>
</OrderDetails>
<OrderDetails>
<OrderDate>6/13/2013 5:08:00 PM</OrderDate>
<OrderDetailID>25677</OrderDetailID>
<OrderID>87709</OrderID>
<ProductCode>ABCDEFG</ProductCode>
<ProductID>9757</ProductID>
<ProductName>XYZ 2</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>300</Quantity>
<TotalPrice>1425.0000</TotalPrice>
</OrderDetails>
</Orders>
<Orders>
<OrderID>84757</OrderID>
<CustomerID>123456</CustomerID>
<PaymentMethodID>5</PaymentMethodID>
<PONum />
<ShippingMethodID>141</ShippingMethodID>
<OrderDetails>
<OrderDate>10/30/2012 3:02:00 PM</OrderDate>
<OrderDetailID>21472</OrderDetailID>
<OrderID>84757</OrderID>
<ProductCode>58309</ProductCode>
<ProductID>9756</ProductID>
<ProductName>XYZ 12V</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>160</Quantity>
<TotalPrice>760.0000</TotalPrice>
</OrderDetails>
</Orders>
</xmldata>
87709
123456
5.
502
2013年6月13日下午5:08:00
25676
87709
58309-SYL
9756
ABCD
4.7500
300
1425
2013年6月13日下午5:08:00
25677
87709
ABCDEFG
9757
XYZ 2
4.7500
300
1425
84757
123456
5.
141
2012年10月30日下午3:02:00
21472
84757
58309
9756
XYZ 12V
4.7500
160
760
<xmldata>
<Orders>
<OrderID>87709</OrderID>
<CustomerID>123456</CustomerID>
<PaymentMethodID>5</PaymentMethodID>
<PONum />
<ShippingMethodID>502</ShippingMethodID>
<OrderDetails>
<OrderDate>6/13/2013 5:08:00 PM</OrderDate>
<OrderDetailID>25676</OrderDetailID>
<OrderID>87709</OrderID>
<ProductCode>58309-SYL</ProductCode>
<ProductID>9756</ProductID>
<ProductName>ABCD</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>300</Quantity>
<TotalPrice>1425.0000</TotalPrice>
</OrderDetails>
<OrderDetails>
<OrderDate>6/13/2013 5:08:00 PM</OrderDate>
<OrderDetailID>25677</OrderDetailID>
<OrderID>87709</OrderID>
<ProductCode>ABCDEFG</ProductCode>
<ProductID>9757</ProductID>
<ProductName>XYZ 2</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>300</Quantity>
<TotalPrice>1425.0000</TotalPrice>
</OrderDetails>
</Orders>
<Orders>
<OrderID>84757</OrderID>
<CustomerID>123456</CustomerID>
<PaymentMethodID>5</PaymentMethodID>
<PONum />
<ShippingMethodID>141</ShippingMethodID>
<OrderDetails>
<OrderDate>10/30/2012 3:02:00 PM</OrderDate>
<OrderDetailID>21472</OrderDetailID>
<OrderID>84757</OrderID>
<ProductCode>58309</ProductCode>
<ProductID>9756</ProductID>
<ProductName>XYZ 12V</ProductName>
<ProductPrice>4.7500</ProductPrice>
<Quantity>160</Quantity>
<TotalPrice>760.0000</TotalPrice>
</OrderDetails>
</Orders>
</xmldata>