我有一个具有大致以下结构的 XML,这里的相关特征是元素对“F”和“Child_Fs”的递归关系。“Child_Fs”可以包含任意数量的“F”,而“F”只能包含一个“Child_Fs”:
<A>
<B>
<F id="1">
<J/>
<K/>
<Child_Fs>
<F id="1.1">
<J/>
<K/>
<Child_Fs>
<F id="1.1.1">
<J/>
<K/>
<Child_Fs>
...
</Child_Fs>
</F>
<F id="1.1.2">
...
</F>
<F id="1.1.3">
...
</F>
<F id="1.1.4">
...
</F>
.
.
.
</Child_Fs>
</F>
<F id="1.2">
...
</F>
<F id="1.3">
...
</F>
<F id="1.4">
...
</F>
.
.
.
</Child_Fs>
</F>
<F id="2">
...
</F>
<F id="3">
...
</F>
<F id="4">
...
</F>
.
.
.
<G/>
<H/>
<I/>
</B>
<C/>
<D/>
<E/>
</A>
我的实际 XML 不包含 ID,我只是在此示例中编写它们以用于说明目的。
所以我想在转换后得到以下 XML,其中所有“F”元素都是其对应的最高“F/Child_Fs”祖先的子元素。这意味着 F 元素的最大深度应仅出现两次 (F/Child_Fs/F/Childfs)。这里的另一个重要要求是保持所有数据(包括属性和文本)完好无损,这只是一个重定位操作:
<A>
<B>
<F id="1">
<J/>
<K/>
<Child_Fs>
<F id="1.1">
<J/>
<K/>
<Child_Fs>
</Child_Fs>
</F>
<F id="1.1.1">
<J/>
<K/>
<Child_Fs>
</Child_Fs>
</F>
...
<F id="1.1.2">
...
</F>
<F id="1.1.3">
...
</F>
<F id="1.1.4">
...
</F>
.
.
.
<F id="1.2">
...
</F>
<F id="1.3">
...
</F>
<F id="1.4">
...
</F>
.
.
.
</Child_Fs>
</F>
<F id="2">
...
</F>
<F id="3">
...
</F>
<F id="4">
...
</F>
.
.
.
<G/>
<H/>
<I/>
</B>
<C/>
<D/>
<E/>
</A>
如果有人能给我一个提示,我将不胜感激。直到现在我还没有想出一个正确的 XSL 样式表。
提前谢谢了。