xPath遍历

时间:2009-03-21 19:42:31

标签: xpath traversal

我正在尝试使用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']&lt; - 给我主要图片和标题

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

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

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


修改

我的意思是“这个特殊的一个”是如何得到这个div class =“resumenesto”,一个位于div class =“fondoprincipal”中的那个......


修改2

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

3 个答案:

答案 0 :(得分:2)

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

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

//div[@class='resumenesto']

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

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

此外,“你这个特别的人”是什么意思?告诉xpath特异性的唯一方法是给它上下文,例如“div with class resumenesto,它位于其他div中”,或者“第一个div与类resumenesto”。

阅读W3Schools' overview of XPath syntax了解更多信息。

编辑:

让div居住在“fondoprincipal”中:

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

要进行测试,您需要:

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

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

关于将其放在页面上,您可以在asp.net中进行。使用XElement加载值,然后使用XPathSelectElement获取值(http://msdn.microsoft.com/en-us/library/bb156083.aspx)。