Xml 使用XSLT组合来自不同文件的节点以生成一个文件

Xml 使用XSLT组合来自不同文件的节点以生成一个文件,xml,xslt,xslt-1.0,xslt-2.0,xslt-grouping,Xml,Xslt,Xslt 1.0,Xslt 2.0,Xslt Grouping,我有几个包含数据的文件,我想将一些节点分组并生成一个文件。我只给出了2个示例文件,但可能有很多。输入文件在xml文件中作为includes list.xml列出 基本上,应该根据每个文件的类型进行分组,并且每个文件都应该作为特定功能区域的节点列出 这可以用XSLT实现吗?也许不止一次转换 文件列表:list.xml 输入文件01:1c8dca64-8b40-4e58-8581-5104f5ca3f3e.xml 输入文件02:7f10e39d-ca8c-4c17-9a0f-2dcbceaed51.

我有几个包含数据的文件,我想将一些节点分组并生成一个文件。我只给出了2个示例文件,但可能有很多。输入文件在xml文件中作为includes list.xml列出

基本上,应该根据每个文件的类型进行分组,并且每个文件都应该作为特定功能区域的节点列出

这可以用XSLT实现吗?也许不止一次转换

文件列表:list.xml

输入文件01:1c8dca64-8b40-4e58-8581-5104f5ca3f3e.xml

输入文件02:7f10e39d-ca8c-4c17-9a0f-2dcbceaed51.xml

所需输出


首先,将变量$models绑定到模型元素集,例如,可以通过多种方式执行此操作

<xsl:variable name="models" select="//@href/document(.)/*"/>
然后进行分组:

<xsl:for-each-group select="$models/*/vertex" group-by="functionalarea">
    <node>
       <name><xsl:value-of select="current-grouping-key()"/></name>
       <children>
          <xsl:for-each select="current-group()">
            <child><xsl:value-of select=".//model"/></child>
          </xsl:for-each>
       </children>
    </node>
</xsl:for-each-group>

您可能重复标记了[xslt-1.0]和[xslt-2.0]。您实际使用的是哪一个?有两个选项,当您使用XInclude时,您只需在解析器/XSLT处理器使用的解析器中启用XInclude处理,然后XSLT处理的输入将不包含xi:include元素,而是包含引用的内容,您可以简单地对其进行分组。或者,您可以使用documentindex/xi:include/@href拉入这些引用的文件,然后使用分组。关于分组,请参阅。感谢您的代码对我们的帮助。如果我有输入xml 123456。如何获取以下输出?如何获取组循环中的父级?123456供应链34c1e701-5a70-4493-b877-38624348947c 25a39e71-aa59-4f63-9c09-8cc4e36bae72 58A7718-1e95-408b-a6ae-f185348ec310。。如果这是对原始问题的澄清,请编辑该问题。如果是一个新问题,那么开始一个新问题。请不要在评论中提出补充问题-它们不是为此而设计的,并且格式最终无法阅读。感谢您的评论,但是上面的代码没有按预期工作。它所做的是将两个文件中的所有节点合并到一个文件中,但是它不会按照我假设的那样对它们进行分组,因为include文件的内容是一次读取一个的,如果没有公共的,它只会包含内容。在XSLT中没有一次执行一个操作:它是一种没有时间概念的声明性语言。如果它对你不起作用,那么我认为你做错了什么,或者你的数据与这里描述的不一样。
<model>
   <contains>
      <vertex>
         <functionalarea>Supply Chain</functionalarea>
         <breakdowns>
            <model>58a77718-1e95-408b-a6ae-f185348ec310</model>
         </breakdowns>
      </vertex>
      <vertex>
         <functionalarea>Planning</functionalarea>
         <breakdowns>
            <model>87767baa-bab9-46dd-80d8-a0d0c3993429</model>
         </breakdowns>
      </vertex>
      <vertex>
         <functionalarea>Execution</functionalarea>
         <breakdowns>
            <model>f21aef69-9772-49bd-b6c1-4f3e55fc3887</model>
         </breakdowns>
      </vertex>
   </contains>
</model>
<tree>
    <node>
       <name>Supply Chain</name>
       <children>
          <child>34c1e701-5a70-4493-b877-38624348947c</child>
          <child>25a39e71-aa59-4f63-9c09-8cc4e36bae72</child>
          <child>58a77718-1e95-408b-a6ae-f185348ec310</child>
       </children>
    </node>
    <node>
       <name>Planning</name>
       <children>
          <child>45c0d6c3-a910-4050-b10e-f17eb7276c44</child>
          <child>87767baa-bab9-46dd-80d8-a0d0c3993429</child>
       </children>
    </node>
    <node>
       <name>Execution</name>
       <children>
          <child>f21aef69-9772-49bd-b6c1-4f3e55fc3887</child>
       </children>
    </node>
</tree>
<xsl:variable name="models" select="//@href/document(.)/*"/>
<xsl:for-each-group select="$models/*/vertex" group-by="functionalarea">
    <node>
       <name><xsl:value-of select="current-grouping-key()"/></name>
       <children>
          <xsl:for-each select="current-group()">
            <child><xsl:value-of select=".//model"/></child>
          </xsl:for-each>
       </children>
    </node>
</xsl:for-each-group>