Вопрос

В настоящее время я работаю над извлечением данных из HTML. Отказ Я хотел бы извлечь текст между двумя <p class="xfHeading"> Теги.

         <p class="xfHeading"><b>XYZ:</b></p> 
            <p>asdfghjk</p>  
            <p>sdsdsd</p>  
            <p>asdvcvcfghjk</p>  

         <p class="xfHeading"><b>ABC:</b></p> 
            <P>fvgbhnjm</P>  

         <p class="xfHeading"><b>PQR:</b></p> 
            <ul> 

            </ul> 

         <p class="xfHeading"><b>MNO:</b></p> 
             <ul> 
                <li>jdjshdj</li>  
             </ul> 

То выход должно быть :

asdfghjk.

sdsdsd.

ASDVCVCFGHKJK

Один из способов сделать это:

/p[class="xfHeading"]/following-sibling::p[0]|/p[class="xfHeading"]/following-sibling::p[1]|/p[class="xfHeading"]/following-sibling::p[2]

или

/p[class="xfHeading"]/following-sibling::p[position()<4]

Однако, поскольку содержание между продолжающимися изменением все время мне нужно решение, в котором содержание между двумя тегами <p class="xfHeading"> извлекается.

Это было полезно?

Решение

Использовать:

(//p[@class="xfHeading"])[1]
          /following-sibling::p
             [. << (//p[@class="xfHeading"])[2]]
                 /text()

Это означает: Выберите текстовый узел детей всех p Элементы, которые следуют братьям и сестрами первого p элемент в документе с class атрибут имеет значение xfHeading, и что в то же время предшествуют второму p элемент в документе с class атрибут имеет значение xfHeading.

Другие советы

РЕДАКТИРОВАТЬ: После вашего разъяснения мое предложение - использовать Флюс выражение, такое как следующее. Это ищет <p> с правильным <b> содержимое метки на основе уникального содержимого этого <b> тег и возвращает текст каждого <p> Тег, который является родным братом.

for $b in //p[class="xfHeading"]/b and $p in //p[class="xfHeading"]/p
    where $b/text() = "XYZ:"
        return p/text()

Обратите внимание, что то // это конструкция XPath, а не комментарий

Старый ответ: Без примера того, что вы хотели бы в результате возможные данные, отвечая на вопрос, немного жестко. Однако для выбора, например, текст внутри <b> Теги, вы сделаете:

/p[class = "xfHeading"]/b/text()

В общем, добавление text() К концу выражения возвращает текст внутри узела.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top