我的目的是在xml结构上请求,只使用一个XPath评估,以获得包含每个“my_class”div的text3和text5串联的字符串列表。
结构示例如下:
<div>
<div>
<div class="my_class">
<div class="my_class_1"></div>
<div class="my_class_2">text2</div>
<div class="my_class_3">
text3
<div class="my_class_4">text4</div>
<div class="my_class_5">text5</div>
</div>
</div>
<div class="my_class_6"></div>
</div>
<div>
<div class="my_class">
<div class="my_class_1"></div>
<div class="my_class_2">text12</div>
<div class="my_class_3">
text13
<div class="my_class_4">text14</div>
<div class="my_class_5">text15</div>
</div>
</div>
</div>
</div>
这意味着我想得到这个结果列表:
- 索引0 =&gt; text3 text5
- 索引1 =&gt; text13 text15
我目前只能获取my_class节点,但是我想要排除text12;或者每个字符串的列表,没有连接。
我怎么办?
提前感谢您的帮助。
编辑:我从搜索中删除text4和text14,以便在我的示例中准确无误
答案 0 :(得分:1)
编辑:现在问题已经改变......
XPath 1.0 :没有“字符串列表”数据类型。您可以使用此表达式选择所需文本节点的所有容器元素:
/div/div/div[@class='my_class']/div[@class='my_class_3']
然后使用宿主语言的正确DOM方法获取每个所选元素的字符串值(所有后代文本节点的串联) the descendat text您想要的节点,并将其字符串值与正确的相对XPath或DOM方法连接起来:
text()[1]|div[@class='my_class_5']
XPath 2.0 :有序列数据类型。
/div/div/div[@class='my_class']
/div[@class='my_class_3']
/concat(text()[1],div[@class='my_class_5'])
答案 1 :(得分:0)
你能不能只使用:
//my_class/my_class_3
然后从中获取.innerText?可能需要进行一些间距清理,但它应该包含所有内部文本(包括来自类4和5的内容)但没有标记。
编辑:侮辱后
concat(/div/div/div[@class=my_class]/div[@class=my_class_3]/text(), ' ', /div/div/div[@class=my_class]/div[@class=my_class_5]/text())
这可能有效