我目前正在尝试通过获取其中的某些元素并遍历所选元素的祖先,将 XML 文件转换为多个输出 XML 文件。
例如:
源 XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<level_a>
<level_b>
<level_c>
<level_d>
<level_e/>
</level_d>
</level_c>
</level_b>
<level_b>
<level_c>
<level_d>
<level_e/>
</level_d>
</level_c>
</level_b>
<level_b>
<level_c>
<level_d>
<level_e/>
<level_e/>
<level_e/>
</level_d>
</level_c>
</level_b>
<level_b>
<level_c>
<level_d>
<level_d>
<level_e/>
</level_d>
</level_d>
</level_c>
</level_b>
</level_a>
</root>
输出 XML 文件:
1:
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="e"/>
</output>
</output>
</output>
</output>
2:
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="e"/>
</output>
</output>
</output>
</output>
3:
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="e"/>
<output level="e"/>
<output level="e"/>
</output>
</output>
</output>
</output>
4:
<output>
<output level="b">
<output level="c">
<output level="d">
<output level="d">
<output level="e"/>
</output>
</output>
</output>
</output>
</output>
我知道我可以在使用以下 XPath 生成序列的行中做一些事情:
(//level_d[not(level_d)])[last()]/ancestor::*[self::level_c|self::level_b]
然后用 foreach 对其进行迭代,我将按文档顺序获得结果。
但我真正感兴趣的是,如何在不使用 foreach 的情况下实现相同的目标,我能想到的任何解决方案都会返回所有元素反转......
非常感谢任何提示
最好的问候
Vlax