前一个同级的xpath

2024-09-22 18:34:03 发布

您现在位置:Python中文网/ 问答频道 /正文

XML

<root>
  <p>nodea text 1</p>
  <p>nodea text 2</p>
  <nodea>
  </nodea>
  <p>nodeb text 1</p>
  <p>nodeb text 2</p>
  <nodeb>
  </nodeb>
</root>

我想得到nodea或nodeb前面的第一个同级p标记(如果有)。例如,对于上面的xml,各个节点的前面的同级是

nodea前面的兄弟姐妹

^{pr2}$

nodeb前面的同级

<p>nodeb text 1</p>
<p>nodeb text 2</p>

我尝试过下面的xpath,但是它给了我前面的p标记nodea而不是nodeb。在

nodeb = xml.find('nodeb')
nodeb.xpath('preceding-sibling::p[not(preceding-sibling::nodea)][1]')

如果节点前面没有前面的p标记,那么它应该返回空列表。例如,对于下面的xml,nodeb没有前面的同级p标记。在

<root>
  <p>nodea text 1</p> 
  <nodea>
  </nodea>
  <nodeb>
  </nodeb>
</root>

如果有人能解释我的xpath为什么不能工作,以及在编写xpath时应该记住什么?在


Tags: text标记节点notrootxmlfindxpath
1条回答
网友
1楼 · 发布于 2024-09-22 18:34:03

如果前面的同级元素是p元素,则可以选择preceding-sibling::*[1][self::p]来选择前面的同级元素。在

至于您的尝试,我认为如果您选择nodeb元素,那么您需要选择preceding-sibling::p[preceding-sibling::nodea][1],因为您希望查看位于nodeb和{}元素之间的兄弟p。您的条件preceding-sibling::p[not(preceding-sibling::nodea)][1]确实选择了没有前面的nodea同级的{}同级,它们是文档顺序中的前两个p元素。在

相关问题 更多 >