栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何以与命名空间无关的方式通过Python中的XPath查找XML元素?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何以与命名空间无关的方式通过Python中的XPath查找XML元素?

*[local-name() = "elem"]
语法应该可以工作,但是为了简化操作,您可以创建一个函数来简化部分或全部“通配符名称空间”
XPath表达式的构造。

在Ubuntu 10.04上 使用 python-lxml 2.2.4, 下面的脚本对我 有用
。您需要根据要为每个元素指定默认名称空间的方式自定义行为,并处理要折叠到表达式中的任何其他XPath语法:

import lxml.etreedef xpath_ns(tree, expr):    "Parse a simple expression and prepend namespace wildcards where unspecified."    qual = lambda n: n if not n or ':' in n else '*[local-name() = "%s"]' % n    expr = '/'.join(qual(n) for n in expr.split('/'))    nsmap = dict((k, v) for k, v in tree.nsmap.items() if k)    return tree.xpath(expr, namespaces=nsmap)doc = '''<root xmlns="http://really-long-namespace.uri"    xmlns:other="http://with-ambivalent.end/#">    <other:elem/></root>'''tree = lxml.etree.fromstring(doc)print xpath_ns(tree, '/root')print xpath_ns(tree, '/root/elem')print xpath_ns(tree, '/root/other:elem')

输出:

[<Element {http://really-long-namespace.uri}root at 23099f0>][<Element {http://with-ambivalent.end/#}elem at 2309a48>][<Element {http://with-ambivalent.end/#}elem at 2309a48>]

更新 :如果发现确实需要解析XPath,则可以签出py-dom-xpath之类的项目,该项目是XPath 1.0(大部分)的纯Python实现。至少可以使您对解析XPath的复杂性有所了解。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/641514.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号