Извлечь содержимое с помощью XPath? - PullRequest
1 голос
/ 16 октября 2010

У меня есть 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

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

Ответы [ 2 ]

1 голос
/ 16 октября 2010

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

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

и

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

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

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

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

1 голос
/ 16 октября 2010

Следующий 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'    
...