如何用xslt将嵌套xml表转换为平面表
我有一个xml文件如何用xslt将嵌套xml表转换为平面表,xml,xslt,Xml,Xslt,我有一个xml文件 <xml> <order> <orderid>123</orderid> <orderdate>2013-04-12T00:00:00.000+01:00</orderdate> <orderline> <articlename>AAAA</articlename> <quantity>10</qua
<xml>
<order>
<orderid>123</orderid>
<orderdate>2013-04-12T00:00:00.000+01:00</orderdate>
<orderline>
<articlename>AAAA</articlename>
<quantity>10</quantity>
</orderline>
<orderline>
<articlename>BBBB</articlename>
<quantity>15</quantity>
</orderline>
</order>
<order>
...
</order>
</xml>
我需要使用XSLT将其转换为:
<xml>
<item>
<orderid>123</orderid>
<articlename>AAAA</articlename>
<quantity>10</quantity>
</item>
<item>
<orderid>123</orderid>
<articlename>BBBB</articlename>
<quantity>15</quantity>
</item>
</xml>
我已经尝试了使用和进行一些转换,但没有任何效果
提前感谢。这个简单的样式表应该可以:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xml>
<xsl:for-each select="//order/orderline">
<item>
<orderid><xsl:value-of select="//orderid" /></orderid>
<articlename><xsl:value-of select="articlename" /></articlename>
<quantity><xsl:value-of select="quantity" /></quantity>
</item>
</xsl:for-each>
</xml>
</xsl:template>
</xsl:stylesheet>
样式表
输入
输出
请共享您已经尝试过的XSLT。@Martin Prikryl我不能,因为我没有保存我尝试过的所有版本,我上一次尝试的版本与Sundar G版本类似。1。对于每个项目,结束标记的顺序错误。2.我已经试过了,但不起作用。对我来说,在For-each中似乎有select=//order/orderline的内容。从“空白工作表”中重新键入了所有内容,但有一个问题:文件中有多个订单,所有行都从第一个订单获取orderid。很高兴我能提供帮助!这个解决方案没有什么特别之处——它是基本的XSLT。例如,查看学习XSLT的资源列表。这是一个非常好的问题!@dimitre novatchev的答案被删除。但这里也有答案:@jeroenviertplaimers:谢谢!不幸的是,你链接的问题也被删除了。我在这里复制/粘贴了HTML:你能试着将它保存为本地文件,然后打开它吗?他们还删除了我关于这个的元问题,所以我现在找不到其他参考文献。您可能还想查看此帐户:稍后我还发现:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!--
Identity transform:
http://en.wikipedia.org/wiki/Identity_transform#Using_XSLT
-->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="orderline">
<item>
<!--
Apply preceding <orderid> sibling and the children of the current element
-->
<xsl:apply-templates select="preceding-sibling::orderid | node()"/>
</item>
</xsl:template>
<xsl:template match="order">
<!--
Only apply <orderline> children, <orderdate> is dropped and <orderid> is
handled by the template above
-->
<xsl:apply-templates select="orderline"/>
</xsl:template>
</xsl:stylesheet>
<xml>
<order>
<orderid>123</orderid>
<orderdate>2013-04-12T00:00:00.000+01:00</orderdate>
<orderline>
<articlename>AAAA</articlename>
<quantity>10</quantity>
</orderline>
<orderline>
<articlename>BBBB</articlename>
<quantity>15</quantity>
</orderline>
</order>
<!-- Added additional <order> element for demonstration -->
<order>
<orderid>456</orderid>
<orderdate>2014-05-13T00:00:00.000+02:00</orderdate>
<orderline>
<articlename>CCCC</articlename>
<quantity>20</quantity>
</orderline>
<orderline>
<articlename>DDDD</articlename>
<quantity>25</quantity>
</orderline>
</order>
</xml>
<?xml version="1.0" encoding="utf-8"?>
<xml>
<item>
<orderid>123</orderid>
<articlename>AAAA</articlename>
<quantity>10</quantity>
</item>
<item>
<orderid>123</orderid>
<articlename>BBBB</articlename>
<quantity>15</quantity>
</item>
<item>
<orderid>456</orderid>
<articlename>CCCC</articlename>
<quantity>20</quantity>
</item>
<item>
<orderid>456</orderid>
<articlename>DDDD</articlename>
<quantity>25</quantity>
</item>
</xml>