可能有比我所做的更好的方法来做到这一点,因为我被困在一个隐喻的坑里。
我想获取特定节点下的一些节点。我想出了这个 XPath 表达式:
>>> content_tags = 'h1 h2 h3 h4 h5 h6 p ol ul dl table'.split()
>>> content_xpath = './/*[%s]' % ' or '.join('self::%s' % i for i in content_tags)
>>> content_xpath
'.//*[self::h1 or self::h2 or self::h3 or self::h4 or self::h5 or
self::h6 or self::p or self::ol or self::ul or self::dl or
self::table]'
列出的任何 content_tags 都可以是我想要的层次结构的顶部,我想忽略可能处于相同或更高级别的其他元素。不幸的是,有时有一个<p>
inside a
<ul>
或 a <table>
,或 a <table>
inside a<ol>
等,我将内部元素与外部元素一起作为单独的结果。有没有一种好方法可以执行“剪切”以忽略可能嵌套在我发现的节点中的节点?还是有一些更好的方法可以做到这一点,而我却不知何故失踪了?
这是我要解析的示例。
<div class="interesting">
<img src="ignore-this.jpg"/>
<h1>I want this.</h1>
<p>I want this, too.</p>
<div class="sidebar">
<ul>
<li><p>I only want one copy of this, inside the UL.</p></li>
<li><p>Ditto.</p></li>
</ul>
</div>
</div>
谢谢!
顺便说一句,我在 w3.org 邮件列表上发现了一些帖子,提倡“不包含任何后代或自我”过滤器,我认为这完全符合我的要求,但似乎没有使其成为最终规格。:(