什么是我的XML的Xpath查询?

时间:2014-02-22 17:41:56

标签: html xml xpath

我有一个具有这种特定结构的XML文档:

<ul>
<li>
the 
<a href="http://www...">dog</a> 
is black
</li>
<li >
the
<a href="http://www....">cat</a>
is white
</li>
</ul>

但我也有这个:

<ul>
<li>
the bird is blue
</li>
<li >
the
<a href="http://www....">frog</a>
</li>
</ul>

我不知道<a>中是否有<li>以及它在哪里。 我希望XPath查询得到类似&#34的句子;狗是黑色&#34;,&#34;猫是白色&#34;,&#34;鸟是蓝色&#34;和青蛙&#34;

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您被 XPath 1.0 绑定,则无法将句子作为分隔的标记获取。您可以使用

获取所有列表元素中的所有文本
//ul//text()

,但对于第一个HTML代码段,这将返回类似“狗是黑色的猫是白色的”。

如果您需要分隔句子,请从XPath外部检索列表项和句子(例如PHP,Java,......;无论您使用什么)。如何做到这一点因语言而异,请查看参考文献或改进问题/提出另一个问题。

//ul/li

使用 XPath 2.0 ,您可以获得更多运气,并且可以使用其中一个查询:

//ul/li/data(.)
//ul/li/string-join(.//text. ' ')

如果第一个返回你需要使用的内容,如果空白有问题(对于不同的实现,空格处理是不同的,但通常可以配置),请选择更灵活的第二个查询并根据需要进行调整。

答案 1 :(得分:0)

感谢您的回复,我使用Xpath作为带有HTML Parser的iOS应用程序:hpple(https://github.com/topfunky/hpple) 我认为它使用Xpath 1.0,因为日志说我无法识别字符串连接函数

//ul//text() 

有效,但每个单词返回一个单词,而不是每行一行