我是XML dev的新手。我有一些关于使用XPATH和libxml进行XML解析的问题。
我的XML结构为:
<resultset>
<result count=1>
<row>
<name> He-Man! </name>
<home> Greyskull </home>
<row>
</result>
<result count=2>
<row>
<name> Spider-Man</name>
<home> Some downtown apartment </home>
<row>
<row>
<name> Disco-Man!</name>
<home> The 70's dance floor </home>
<row>
</result>
<resultset>
我需要从这个XML中挑选出名称,但是如果计数是2,我只需要从第一个记录中获取它。我经历了一些教程,但是我无法想出一个可以达到此目的的XPATH查询。
/ name将选择所有名称元素。
/ result [@count&gt; 1] / row [1] / name | / result [@count = 1] / row / name
这可以用XPATH完成吗?通过XPATH或遍历XML树更好吗?
有人可以指出我在XML中进行一些复杂的搜索吗?
编辑:实际场景需要选择XML行的子集,有时会嵌套在2个级别。这听起来像我需要OR'|'选择我需要的节点的许多路径...我不确定这是否有效而不是走树...上面的类型是为了复制问题:)
谢谢!
答案 0 :(得分:0)
我可能会保持我的xpath更简单,只提取两种情况,然后遍历两个节点集。
如果确实需要沿着单路径路径运行,那么您应该尝试使用允许您实时输入的xpath表达式,而不必重新编译C / C ++代码。您应该可以通过将XML加载到firefox并使用firebug来实现这一点 - 例如,在firebug控制台中键入$ x('// name')会产生三个节点。
但请注意,您的XML无效......您有一堆“&lt; row&gt;”应为“&lt; / row&gt;”和“&lt; resultset&gt;”相同你的计数需要
<result count="1">
即。带有引号的值。
答案 1 :(得分:0)
试试这个XPath -
<强> /resultset/result[@count=2]/row/name
强>
这将给出属于此XPath的所有节点的列表。从这里只取第一个元素(因为你只需要第一个记录)。