xPath Traversing - PullRequest
       18

xPath Traversing

1 голос
/ 21 марта 2009

Я пытаюсь использовать xPath для обхода кода газеты (для практики), сейчас я хотел бы получить основную статью, ее изображение и небольшое описание, которое я получаю. Но я пока не очень разбираюсь в xPath и не могу найти небольшое описание.

с этим кодом:

<div class="margenesPortlet">

<div class="fondoprincipal">
<div class="margenesPortlet">
<a href='notas/n1092329.htm' ><img id="LinkNotaA1_Foto" src="http://i.oem.com.mx/5cfaf266-bb93-436c-82bc-b60a78d21fb6.jpg" height="250" width="300" border="0" /></a>

<div class="piefoto_esto">Un tubo de 12 pulgadas al lado de la Vialidad Sacramento que provoc&#243; el corte del servicio durante toda la ma&#241;ana y hasta alrededor de las cuatro de la tarde. Foto: El Heraldo de Chihuahua</div>

<div class="cabezaprincesto"><a href='notas/n1092329.htm' class='cabezaprincesto'  >Sin agua 8 mil usuarios</a></div>
<div class="resumenesto"><a href='notas/n1092329.htm' class='resumenesto'  >La ruptura de una l&#237;nea en el tanque de rebombeo de agua Sacramento dej&#243; sin servicio a ocho mil usuarios, en once colonias del sur de la ciudad. </a></div>
</div>
</div>

</div>

Я хочу получить картинку (с подписью или без), а затем название статьи. Эти 3 вещи, которые я могу получить, используя:

// div [@ class = 'fondoprincipal'] <- дает мне основное изображение и подпись </p>

// a [@ class = 'cabezaprincesto'] / text () <- дает мне название статьи </p>

но я не могу достать небольшое описание, которое является div с class = "resumenesto", я не пытался получить что-либо по этому идентификатору, потому что один и тот же идентификатор используется снова и снова в остальной части HTML так что он возвращает много дополнительных предметов.

Как я могу получить этот конкретный? а потом кто-нибудь из вас порекомендует мне хороший способ разбора его на другой веб-странице? Я подумал, может быть, PHP пишет какой-то HTML, используя эти значения, но я не совсем уверен ...


Редактировать

Что я имею в виду под "этим конкретным", как я могу получить этот div class = "resumenesto", тот, который находится внутри div class = "fondoprincipal" ...


Редактировать 2

Спасибо, теперь xPath Traversing стал более понятным. Но что касается моего второго вопроса, может ли кто-нибудь из вас порекомендовать мне хороший способ разбора его на другой веб-странице? Я подумал, может быть, PHP пишет какой-то HTML, используя эти значения, но я не уверен, действительно ...

Ответы [ 3 ]

2 голосов
/ 21 марта 2009

Вы говорите "id" из resumenesto, но в вашем примере кода у div, о котором вы говорите, есть класс resumenesto.

Далее, когда вы используете xpath что-то вроде этого:

//div[@class='resumenesto']

То, что вы получаете, это список узлов, соответствующих этому xpath. Поэтому, если вы хотите конкретно указать только один элемент в этом списке, вам необходимо указать, какой элемент в списке:

//div[@class='resumenesto'][1]

Кроме того, что вы подразумеваете под "именно этим"? Единственный способ определить специфичность xpath - дать ему контекст, например, «div с классом resumenesto, который находится в каком-то другом div», или «первый из div с классом resumenesto».

Прочтите Обзор W3Schools синтаксиса XPath для получения дополнительной информации.

Edit:

Чтобы получить div, находящийся в "fondoprincipal":

//div[@class='fondoprincipal']//div[@class='resumenesto']

Это говорит xpath найти любой потомок div с классом fondoprincipal внутри документа, а внутри этого div найти любой потомок div с классом resumenesto.

0 голосов
/ 22 марта 2009

Чтобы пройти тест, нужно:

//div[@class='fondoprincipal']//a[@class='resumenesto']

Обратите внимание, что вы хотите получить a (вместо div, как предложил Рауль), поскольку именно в этом элементе вы получите текст.

Что касается размещения на странице, вы можете сделать это на asp.net. Используйте XElement для загрузки значений, а затем XPathSelectElement для получения значений (http://msdn.microsoft.com/en-us/library/bb156083.aspx).

0 голосов
/ 21 марта 2009

И чтобы сузить область поиска, вы также можете добавить div:

//div[@class='resumenesto']/a[@class='resumenesto']/text()
...