如何获取连接文本节点的列表

时间:2010-11-24 17:03:17

标签: xpath

我的目的是在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,以便在我的示例中准确无误

2 个答案:

答案 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())

这可能有效