【问题标题】:XML XPath search with Python lxml fails to filter on text() output使用 Python lxml 进行 XML XPath 搜索无法过滤 text() 输出
【发布时间】:2013-01-21 16:30:59
【问题描述】:

可能遗漏了一些明显的东西——当我过滤一般的“a”节点时,我可以看到它们的文本——包括我想要的目标链接——很好:

ipdb> print [x.text for x in root.xpath(u".//a")]
[u'\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7', None, ... ]

但是当我过滤上面返回的第一个“a”元素中包含的特定文本时,我什么也得不到:

ipdb> print [x.text for x in root.xpath(
    u".//a[text()=" + 
    u'\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7' + 
    u']'  )]
[]
ipdb> 

有什么想法吗?

【问题讨论】:

    标签: python xpath lxml elementtree


    【解决方案1】:

    这里有两种语言:Python 和 XPath。他们每个人都有带引号的字符串。

    在解释 Python 语法时,传递给 .xpath()(您的 XPath 表达式)的字符串内容类似于:.//a[text()=Some text]。但是文本的文字字符串需要在 XPath 中引用:.//a[text()="Some text"]。然后,您需要将其编码为 Python 字符串。这里有几种选择:

    .xpath('.//a[text()="Some text"]')
    .xpath(".//a[text()=\"Some text\"]")
    .xpath(""".//a[text()="Some text"]""")
    

    【讨论】:

    • 看起来 SO 的语法高亮不喜欢 Python 的三引号……
    猜你喜欢
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多