从多个子节点中选择文本的XPath
我需要在Python 2.6中使用lxml和XPath来提取两个文本项:
-名称一 类型1 描述1
-名称二 类型2 描述2
我尝试使用以下XPath:'//*[@id="results"]/li/div/p/child::text()',
但是这只给了我以下文本:
-名称一 类型1
-名称二 类型2
有没有人能建议我应该使用哪个正确的XPath?
<div id="container">
<ol id="results">
<li class="mod1" data-li-position="0">
<a href="first.link"><img src="image001.jpg"></a>
<div class="bd">
<h3>
<a href="some.link">Category 1</a>
</h3>
<p class="description">
<strong class="highlight">Name One</strong>
<strong class="highlight">Type 1</strong>
Description 1
</p>
</div>
</li>
<li class="mod2" data-li-position="1">
<a href="second.link"><img src="image002.jpg"></a>
<div class="bd">
<h3>
<a href="another.link">Category 2</a>
</h3>
<p class="description">
<strong class="highlight">Name Two</strong>
Description 2
<strong class="highlight">Type 2</strong>
</p>
</div>
</li>
1 个回答
2
你XPath的最后一部分:
...../p/child::text()
... 只选择那些是<p>的子元素的子元素的文本节点。这就是你为什么会漏掉,比如说Description 1
,因为它是<p>的直接子元素。你可以尝试把那部分改成下面这样:
...../p//text()
上面的XPath会选择所有的文本节点,这些节点是<p>的后代,换句话说,就是<p>
里面的所有文本节点。