Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
将元素与两个xml文档组合在一起XSLT2.0_Xml_Xpath_Xslt 2.0 - Fatal编程技术网

将元素与两个xml文档组合在一起XSLT2.0

将元素与两个xml文档组合在一起XSLT2.0,xml,xpath,xslt-2.0,Xml,Xpath,Xslt 2.0,如何对元素进行分组,然后将兄弟元素作为子元素返回 这里是我试图实现的一个小片段(这只是一个小片段,所以实际上代码将有多个客户、订单和食品类型) customers.xml <customers> <customer> <fname>James</fname> <orderid>1234</orderid> </customer> 詹姆斯 1234 orders.xml &

如何对元素进行分组,然后将兄弟元素作为子元素返回

这里是我试图实现的一个小片段(这只是一个小片段,所以实际上代码将有多个客户、订单和食品类型)

customers.xml

<customers>
  <customer>
    <fname>James</fname>
    <orderid>1234</orderid>
  </customer>      

詹姆斯
1234
orders.xml

<orders>
  <order>
    <orderid>1234</orderid>
    <name>soda</name>
    <size>large</size>
    <type>drink</type>
  </order>

  <order>
    <orderid>1234</orderid>
    <name>beer</name>
    <size>medium</size>
    <type>drink</type>
  </order>

  <order>
    <orderid>1234</orderid>
    <name>burger</name>
    <size>large</size>
    <type>food</type>

1234
苏打
大的
喝
1234
啤酒
中等的
喝
1234
汉堡
大的
食物
output.xml

<orders>
  <order>
    <fname>James</fname>
    <orderid>1234<orderid>
    <bought type="food">
      <name name="burger">
        <size>large</size>
      </name>
    </bought>
    <bought type="drink">
      <name name="soda">
        <size>large</size>
      </name>
      <name name="beer">
        <size>medium</size>
      </name>
    </bought>
  </order>
</orders>

詹姆斯
1234
大的
大的
中等的

因此,我想将所有类型的食物分组,并将它们的名称和大小作为子元素,如何以最简单的方式实现这一点?

XSLT 2.0为每个组提供了

<xsl:param name="orders-url" select="'orders.xml'"/>
<xsl:variable name="orders-doc" select="doc($orders-url)"/>

<xsl:key name="orderid" match="order" use="orderid"/>

<xsl:template match="customer">
  <order>
    <xsl:copy-of select="fname, orderid"/>
    <xsl:for-each-group select="key('orderid', orderid, $orders-doc)" group-by="type">
      <bought type="{type}">
        <xsl:apply-templates select="current-group()"/>
      </bought>
    </xsl:for-each-group>
  </order>
</xsl:template>

<xsl:template match="order">
  <name name="{name}">
    <xsl:copy-of select="size"/>
  </name>
</xsl:template>

这在XSLT2.0中使用
标记很容易实现。到目前为止你试过什么?