从多个子节点中选择文本的XPath

1 投票
1 回答
785 浏览
提问于 2025-05-01 00:02

我需要在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>里面的所有文本节点。

撰写回答