Как получить список объединенных текстовых узлов - PullRequest
1 голос
/ 24 ноября 2010

Моя цель - запросить структуру xml, используя только одну оценку XPath, чтобы получить список строк, содержащих объединение text3 и text5 для каждого div "my_class".

Пример структуры приведен ниже:

 <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 => text3 text5
- в индексе1 => text13 text15

В настоящее время я могу получить только узлы my_class, но с текстом12, который я хочу исключить;или список каждой строки, без конкатенации.

Как я могу продолжить?

Заранее спасибо за помощь.

РЕДАКТИРОВАТЬ: я удаляю text4 и text14 из поискабудь точным в моем примере

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

РЕДАКТИРОВАТЬ : Теперь вопрос изменился ...

XPath 1.0 : нет такой вещи как "список строк" тип данных. Вы можете использовать это выражение для выбора всех элементов контейнера нужных вам текстовых узлов:

/div/div/div[@class='my_class']/div[@class='my_class_3']

А затем получите с правильным методом DOM вашего основного языка строковое значение каждого из этих выбранных элементов (объединение всех текстовых узлов-потомков) текстовых узлов-потомков, которые вы хотите и объедините их строковое значение с соответствующим относительным методом 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'])
0 голосов
/ 24 ноября 2010

Не могли бы вы просто использовать:

//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())

Это может сработать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...