用于重新排列xml的XSL转换查询

时间:2014-03-04 16:30:07

标签: xml

我有以下方式的xml:

输入:

<Records>
<Record Action="Delete" >
      <Tag1 Name="ID" >B</Tag1>
      <Tag2 Name="ParentID" >A</Tag2>
      <Name>MyName1</Name>
</Record>
<Record Action="Delete" >
      <Tag1 Name="ID" >D</Tag1>
      <Tag2 Name="ParentID" >C</Tag2>
      <Name>MyName1</Name>
</Record>
<Record Action="Delete" >
      <Tag1 Name="ID" >C</Tag1>
      <Tag2 Name="ParentID" >B</Tag2>
      <Name>MyName1</Name>
</Record>
<Record Action="Delete" >
      <Tag1 Name="ID" >A</Tag1>
      <Name>MyName1</Name>
</Record>
<Records>

现在我想使用xsl转换这个xml,以便我有以下输出:

预期产出:

<Records>
<Record Action="Delete" >
      <Tag1 Name="ID" >A</Tag1>
      <Name>MyName1</Name>
</Record>
<Record Action="Delete" >
      <Tag1 Name="ID" >B</Tag1>
      <Tag2 Name="ParentID" >A</Tag2>
      <Name>MyName1</Name>
</Record>
<Record Action="Delete" >
      <Tag1 Name="ID" >C</Tag1>
      <Tag2 Name="ParentID" >B</Tag2>
      <Name>MyName1</Name>
</Record>
<Record Action="Delete" >
      <Tag1 Name="ID" >D</Tag1>
      <Tag2 Name="ParentID" >C</Tag2>
      <Name>MyName1</Name>
</Record>
<Records>

基本上父母应该首先来到xml中的孩子。 (即在这种情况下,A是最顶级的父级,B是A的子级,C是B的子级,D是C的子级) XML文件是一个大文件,最多可达200​​0行。 我正在查看Meunchian方法,看看这种方法是否有效,但不确定它是否是一个内存密集型操作。 你可以建议一个xsl做这个转换。 (在xsl 1.0中)

提前致谢, 斛。

1 个答案:

答案 0 :(得分:0)

我对这个一般问题的回答是首先追查链以找到树的根 - 我希望只有一个 - 然后以递归方式向下处理,寻找其父节点是当前节点的记录并处理它们。

但是:我不认为您的输入或输出是对XML的特别好用。如果你想让X成为Y的孩子,为什么不把它作为XML意义上的孩子并把Y放在X里? XML是分层的;利用这一点。