-2
我写了一个xslt来将输入xml文件转换为名称/值对。无界XML元素名称/值对,而不重复XSLT中的元素名称
输入XML如下:
Input.xml中
<?xml version="1.0" encoding="UTF-8" ?>
<EMailData>
<PersonInfo>
<PersonID>PersonID1092</PersonID>
<EmailAddress>EmailAddress1093</EmailAddress>
<SecureToken>SecureToken1094</SecureToken>
<ContactPrimaryChannel>ContactPrimaryChannel1172</ContactPrimaryChannel>
<Order>
<OrderID>OrderID1224</OrderID>
<CustomerOrderNumber>CustomerOrderNumber1225</CustomerOrderNumber>
<OrderType/>
<Currency>Currency1226</Currency>
<OrderName/>
<OrderFrequency>OrderFrequency1227</OrderFrequency>
<IsRepeatDeliveryOrder>IsRepeatDeliveryOrder1228</IsRepeatDeliveryOrder>
<ProjectedShipmentDate>2015-02-05</ProjectedShipmentDate>
<NextShipmentDate>2015-02-05</NextShipmentDate>
<Total>1229</Total>
</Order>
<Order>
<OrderID>OrderID1259</OrderID>
<CustomerOrderNumber>CustomerOrderNumber1260</CustomerOrderNumber>
<OrderType/>
<Currency>Currency1261</Currency>
<OrderName/>
<OrderFrequency>OrderFrequency1262</OrderFrequency>
<IsRepeatDeliveryOrder>IsRepeatDeliveryOrder1263</IsRepeatDeliveryOrder>
<ProjectedShipmentDate>2015-02-05</ProjectedShipmentDate>
<NextShipmentDate>2015-02-05</NextShipmentDate>
<Total>1264</Total>
</Order>
</PersonInfo>
</EMailData>
我想在这种方式所需的输出:
Desired_OUTPUT.XML
<?xml version="1.0" encoding="UTF-8"?>
<EMailData>
<property name="EVENTINFO">
<property name="PersonInfo">
------
values
------
<property name="Order">
<row>
----
values
----
</row>
<row> <!-- Only Row Value Repeated For More than One Order -->
----
values
----
</row>
</property>
</property>
</property>
这是我使用的XSLT。
XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="EMailData/PersonInfo">
<property name="EVENTINFO">
<property name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</property>
</property>
</xsl:template>
<xsl:template match="EMailData/PersonInfo/*">
<property name="{local-name()}">
<value>
<xsl:apply-templates />
</value>
</property>
</xsl:template>
<!-- Order begins -->
<xsl:template match="EMailData/PersonInfo/Order">
<property name="{local-name()}">
<row>
<xsl:apply-templates select="@*|node()"/>
</row>
</property>
</xsl:template>
<xsl:template match="EMailData/PersonInfo/Order/*">
<property name="{local-name()}">
<value>
<xsl:apply-templates />
</value>
</property>
</xsl:template>
<!-- Order Ends -->
</xsl:stylesheet>
应用该XSLT我得到的输出作为后:
<?xml version="1.0" encoding="UTF-8"?>
<EMailData>
<property name="EVENTINFO">
<property name="PersonInfo">
------
values
------
<property name="Order">
<row>
----
values
----
</row>
</property>
<property name="Order"> <!-- The Order Name is repeated -->
<row>
----
values
----
</row>
</property>
</property>
</property>
</EMailData>
请告诉我在哪里我应该改变我的XSLT。提前致谢!
HTTP:/ /stackoverflow.com/help/someone-answers – 2015-02-09 08:44:19