Извлечь контент с помощью XPath?

c# dom html-agility-pack xml xpath

Вопрос

У меня есть html-контент, который я храню как XML-документ (используя HTML Agility Pack). Я знаю некоторые XPath, но я не могу нул в точный контент, который мне нужен.

В моем примере ниже я пытаюсь извлечь текст «src» и «alt» из большого изображения. Это мой пример:

<html>
<body>
   ....
   <div id="large_image_display">
      <img class="photo" src="images/KC0763_l.jpg" alt="Circles t-shirt - Navy" />
   </div>
   ....
   <div id="small_image_display">
      <img class="photo" src="images/KC0763_s.jpg" alt="Circles t-shirt - Navy" />
   </div>
</body>
</html>

Что такое XPath, чтобы получить «images / KC0763_l.jpg» и «Круглая футболка - ВМФ»? Вот как я догадался, но это неправильно. В основном псевдокод на данный момент:

\\div[@class='large_image_display']\img[1][@class='photo']@src
\\div[@class='large_image_display']\img[1][@class='photo']@alt

Любая помощь в получении этого права будет очень признательна.

Принятый ответ

Следующий xpath приведет вас к атрибутам src для тегов img:

'//html/body/div/img[@class="photo"]/@src'

И аналогичным образом это приведет вас к атрибутам alt:

'//html/body/div/img[@class="photo"]/@alt'

Оттуда вы можете перейти к тексту атрибута. Если вы хотите найти только те, которые соответствуют «large_image_display», вы можете отфильтровать его следующим образом:

'//html/body/div[@id="large_image_display"]/img[@class="photo"]/@src'    

Популярные ответы

Используйте следующие выражения XPath :

/html/body/div[@id='large_image_display']/img/@src

а также

/html/body/div[@id='large_image_display']/img/@alt

Всегда старайтесь избегать использования аббревиатуры // , потому что это может привести к очень неэффективной оценке (вызывает сканирование всего (под) дерева).

В этом конкретном случае мы знаем, что элемент html является верхним элементом документа, и мы можем просто выбрать его с помощью /html - not //html .

Основная проблема заключалась в том, что в ваших выражениях вы использовали \ и \\ и в XPath таких операторов нет. Правильными операторами XPath, которые вы пытались использовать, являются / и аббревиатура // .



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow