我有一个具有这种特定结构的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;
谢谢!
答案 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()
有效,但每个单词返回一个单词,而不是每行一行