Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用xslt将嵌套xml表转换为平面表_Xml_Xslt - Fatal编程技术网

如何用xslt将嵌套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文件

<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>