【问题标题】:Using Xpath to determine if there are any occurrance of text in any child element?使用 Xpath 确定任何子元素中是否出现任何文本?
【发布时间】:2016-05-05 00:57:43
【问题描述】:

我看到一个关于 XML 文档的类似问题,但我有一个 HTML 文档,想知道它是否同样有效。

我正在尝试遍历许多 HTML 页面并确定是否存在包含文本“text”的 span 元素的任何实例:

//*[@id="all_totals"]/div[1]/div/span[7]//span[text()="Export"]

指向 HTML 图像的链接:http://f.cl.ly/items/290L2v373y3c3P050x2m/Image%202016-05-05%20at%202.59.25%20PM.png

在上面的 Xpath 中,我想要的父元素在第二个“div”处结束。我添加了其余的 ("/span[7]...") 作为我要抓取的特定元素。我想检查父元素中包含的任何跨度是否包含文本“文本”,因为如果它们中的任何一个包含,我想要的跨度元素将是 [6] 而不是 [7](“文本”跨度是偶尔发生的额外事件,发生在我想要导致 1 个位置的正增长之前)

我确定我做错了,因此非常感谢任何帮助。

希望这是有道理的。如果需要,很高兴澄清更多!

【问题讨论】:

  • 您能否提供您尝试解析的源文档的示例或链接?
  • 确实,问题正文中的最小样本优于链接,链接会随着时间的推移而改变或中断。
  • 这是我正在使用的 HTML 代码的链接:f.cl.ly/items/290L2v373y3c3P050x2m/… 这是一个链接,因为我想包含大量代码,以提供最完整的图片。

标签: python xpath


【解决方案1】:

要检查任何级别的“父母”,请使用 ancestor

尝试这样的事情(未测试):

 (//*[@id="all_totals"]/div[1]/div
     /span[ ancestor::*/span[contains( text(), "text" )] and position() = 6 
         or position() = 7 ])[1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多