【发布时间】:2009-12-26 18:02:06
【问题描述】:
我正在寻找一种通用算法,它可以将 XML 文件扁平化为表格,给定多个 XPath 表达式,并且由于可用 XPath 引擎实现的性质,我尝试过的所有事情都失败了。
给定一个 XML:
<A Name="NameA">
<B Name="NameB1">
<C Name="NameC1"/>
<C Name="NameC2"/>
<C Name="NameC3"/>
</B>
<B Name="NameB2">
<C Name="NameC4"/>
<C Name="NameC5"/>
<C Name="NameC6"/>
</B>
以及以下 XPath 表达式作为输入:
/A/@Name
/A/B/@Name
/A/B/C/@Name
输出应该是如下形式的表格:
NameA NameB1 NameC1
NameA NameB1 NameC2
NameA NameB1 NameC3
NameA NameB2 NameC4
名称A 名称B2 名称C5
名称A 名称B2 名称C6
我正在尝试使用可用的 Java XML 包(如 javax.xml.xpath、jdom 等)访问此表。但无济于事。
好像是
XPath.evaluate("/A/B/C/@Name", doc, XPathConstants.NODESET);
代码将返回一个无法遍历的“分离”节点。
我在 XPath 评估节点上尝试了多种递归方式,但均无济于事。还考虑了 DOM 树的 DFS 遍历,但所有 XPath 评估器似乎都返回分离节点,其中 node.getParent() 将始终返回“null”。
对于可以跟踪嵌套 XPath 表达式的“多 XPath 表达式感知”算法有什么想法吗?
我觉得使用 XSLT 很容易做到这一点,但我的 XSLT 技能相当生疏......
【问题讨论】:
-
忘了说 XML 和 XPath 都是静态的。该表达式是在没有事先了解 XML 的情况下给出的。