【发布时间】:2014-12-09 12:33:52
【问题描述】:
我正在尝试使用 xpath 从页面中提取 HTML5 微数据。我本质上是想说“查找具有 itemprop=name 属性的嵌套节点,这些节点未嵌套在另一个 itemscope 元素中(任何深度)”。鉴于以下示例,我正在尝试查找产品(鞋子)的名称,但我不想要品牌名称(耐克)。
<div itemscope itemtype="http://schema.org/Product>
<div itemscope itemtype="http://schema.org/Brand">
<div itemprop="name">Nike</div> <!-- don't want this -->
</div>
<div itemprop="name">shoes</div> <!-- do want this -->
</div>
我可以通过使用类似 //*[@itemprop=name] 的方式轻松找到 itemprop=name 元素,但这也会引入品牌名称。顺便说一句,示例中显示的元素可能嵌套在其他标签中,所以我不能简单地说“其直接父级没有 itemscope 属性”我相信可能有一些与我可以使用但我不知道的祖先有关的东西关于xpath的足够了。有什么想法吗?
【问题讨论】:
-
在这个例子中,
shoes是在itemscope里面,所以澄清一下,你想要的名字最多有一个 @987654325 @祖先,但不是那些拥有多个的? -
或者你的意思是对于 any 给定
itemscope元素 X,提取所有在 X 内但不在任何其他itemscope内的名称? -
我通过 python 使用 libxml2 (xmlsoft.org)。要回答您最初的问题,实际上在这种情况下,任何一种情况都足够了,但我想总的来说,第二种情况可能更接近。
-
libxml2 仅限于 XPath 1.0,因此“最多一个祖先”方法是您在单个 XPath 中真正可以做到的最好方法。
-
酷,应该可以。出于兴趣,是否可以使用多个表达式来执行“在 X 内但不在任何其他 itemscope 内的所有名称”?