如果我有这个文件: 输入 file1.xml:
<schema>
<sequence>
<nodeA id="a">
<fruit id="small">
<orange id="x" method="create">
<attributes>
<color>Orange</color>
<year>2000</year>
</attributes>
</orange>
</fruit>
<fruit id="small">
<apple id="x" method="create">
<attributes>
<color>Orange</color>
<year>2000</year>
</attributes>
</apple>
</fruit>
<fruit id="medium">
<orange id="x" method="create">
<attributes>
<color>Orange</color>
<year>2000</year>
</attributes>
</orange>
</fruit>
</nodeA>
<nodeB id="b">
<dog id="large">
<doberman id="x" method="create">
<condition>
<color>Black</color>
</condition>
</doberman>
</dog>
</nodeB>
</sequence>
</schema>
文件 2.xml:
<schema>
<sequence>
<nodeA id="a">
<fruit id="small">
<melon id="x" method="create">
<attributes>
<color>Orange</color>
<year>2000</year>
</attributes>
</melon>
</fruit>
</nodeA>
<nodeB id="b">
<dog id="small">
<poodle id="x" method="create">
<condition>
<color>White</color>
</condition>
</poodle>
</dog>
</nodeB>
</sequence>
</schema>
连接后: 输出:concate.xml
<schema>
<sequence>
<nodeA id="a">
<fruit id="small">
<orange id="x" method="create">
<attributes>
<color>Orange</color>
<year>2000</year>
</attributes>
</orange>
</fruit>
<fruit id="small">
<apple id="x" method="create">
<attributes>
<color>Orange</color>
<year>2000</year>
</attributes>
</apple>
</fruit>
<fruit id="medium">
<orange id="x" method="create">
<attributes>
<color>Orange</color>
<year>2000</year>
</attributes>
</orange>
</fruit>
<fruit id="small">
<melon id="x" method="create">
<attributes>
<color>Orange</color>
<year>2000</year>
</attributes>
</melon>
</fruit>
</nodeA>
<nodeB id="b">
<dog id="large">
<doberman id="x" method="create">
<condition>
<color>Black</color>
</condition>
</doberman>
</dog>
<dog id="small">
<poodle id="x" method="create">
<condition>
<color>White</color>
</condition>
</poodle>
</dog>
</nodeB>
</sequence>
</schema>
对于连接,它将取决于文件顺序,因此 file2.xml 中的节点将放置在 file1.xml 的节点下(如示例所示)。我最多有 5 个文件。仅使用 xsl 转换如何实现这一点,即 xslt 将同时输入 5 个文件并输出 1 个文件?
这是文档结构和我们合并的地方:
<schema>
<sequence>
<nodeA id="a">
<fruit id="small">
<orange id="x" method="create">
...
</orange>
</fruit>
<fruit id="small">
...
</fruit>
<fruit id="large">
...
</fruit>
<!-- we merge below this -->
</nodeA>
<nodeB id="b">
<dog id="large">
<doberman id="x" method="create">
...
</doberman>
</dog>
<dog id="small">
<doberman id="x" method="create">
...
</doberman>
</dog>
<!-- we merge below this -->
</nodeB>
<somenode id="any">
...
</somenode>
</sequence>
</schema>
注意:如果不可能,只连接两个文件输入就可以了,因为它总是可以为其他文件重复。文件中还有各种节点名称(nodeA、nodeB、SomeNode 等),因此需要一些可以概括此问题的东西。
我们可以使用 xsl1.0 或 2.0。
非常感谢。约翰