这可能是比我正在做的更好的方法,因为 我被困在一个隐喻的坑洞里。
我想获得特定节点下的一些节点。我上来了 使用此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>
<ul>
或<table>
或<table>
内<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邮件列表上发现了一些提倡a “不要包括任何后代或自我”过滤器,我认为这样做 正是我想要的东西,但它似乎没有进入 最终规范。 :(答案 0 :(得分:0)
使用//p
进行搜索是明确的递归 - 如果这不是您想要的,请不要这样做! :)
如果您只希望p
直接位于有趣的div
下,但div
可以位于您的层次结构中的任何位置,则表示如下:
//div[@class='interesting']/p
...如果您只想要一个直接位于树中位置的p
,则搜索是相对的,这甚至更简单:
./p