1

我正在尝试使用 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>

我想得到图片(有或没有标题),然后是文章的标题。这三件事我可以通过使用得到:

//div[@class='fondoprincipal'] <-- 给我主要图片和标题

//a[@class='cabezaprincesto']/text() <-- 给我文章的标题

但是我无法获得带有class =“resumenesto”的div的小描述,我没有尝试通过该id获取任何东西,因为相同的id在HTML的其余部分反复使用,所以它返回很多额外的项目。

我怎样才能得到这个特定的?然后你们中的任何人会推荐我一种将其解析到另一个网页的好方法吗?我在想也许 php 使用这些值编写一些 html,但我不确定真的......


编辑

我所说的“这个特定的”的意思是我如何获得这个 div class="resumenesto",它位于 div class="fondoprincipal" 中......


编辑 2

谢谢,现在 xPath Traversing 更加清晰了。但是关于我的第二个问题,你们中有人会推荐我一种将其解析到另一个网页的好方法吗?我在想也许 php 使用这些值编写一些 html,但我不确定真的..

4

3 回答 3

2

你说 resumenesto 的“id”,但在你的代码示例中,你正在谈论的 div 有一个 resumenesto 类。

此外,当您使用类似这样的 xpath 时:

//div[@class='resumenesto']

您得到的是与该 xpath 匹配的节点列表。因此,如果您只想专门引用该列表中的单个项目,则需要指定列表中的哪个项目:

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

此外,您所说的“这个特定的”是什么意思?告诉 xpath 特异性的唯一方法是为其提供上下文,例如“具有类 resumenesto 的 div 位于其他 div 中”,或“第一个具有类 resumenesto 的 div”。

阅读W3Schools 的 XPath 语法概述了解更多信息。

编辑:

要让 div 位于“fondoprincipal”中:

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

这告诉 xpath 在文档中找到任何具有类 fondoprincipal 的后代 div,并在该 div 中找到任何具有类 resumenesto 的后代 div。

于 2009-03-21T19:49:16.820 回答
0

为了缩小搜索范围,您也可以添加 div:

//div[@class='resumenesto']/a[@class='resumenesto']/text()
于 2009-03-21T20:48:15.290 回答
0

要让它通过测试,您需要:

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

请注意,您想获得 a (而不是 Raul 建议的 div ),因为它在您获得文本的那个元素中。

Regarding putting it on a page, you can do it in asp.net. Use the XElement to load the values and then the XPathSelectElement to get the values (http://msdn.microsoft.com/en-us/library/bb156083.aspx).

于 2009-03-21T21:26:23.293 回答