gpt4 book ai didi

Python 2.7 libxml2,XPath,提取xml属性

转载 作者:行者123 更新时间:2023-12-01 06:01:57 38 4
gpt4 key购买 nike

我有以下代码:

import libxml2
import sys

def xpath_grep(query, file):
doc = libxml2.parseDoc(file)
for matched_region in doc.xpathEval(query):
matched_region.saveTo(sys.stdout, format = True) # add match to stdout

if __name__ == '__main__':
if len(sys.argv) <= 1:
# default arguments
query = "data(bn/variable/@name)"
files = ["burglary_bn.xml"]
else:
query = sys.argv[1]
files = sys.argv[2:]

for xml_file in files:
xpath_grep(query, file(xml_file).read())

虽然我相信“数据”函数应该检索 XML 属性的值,但事实并非如此。相反,它给了我一个错误:

xmlXPathCompOpEval: function data not found
Unregistered function
...
libxml2.xpathError: xmlXPathEval() failed

我做错了什么?

编辑:XPath 数据函数的文档可以在这里找到: http://www.w3.org/TR/xpath-functions/#func-data

最佳答案

您不需要调用 xpath 函数来获取属性的值。例如,给定以下 XML 文档:

<doc>
<section>
<person name="bob" color="blue"/>
</section>
</doc>

这段 Python 代码将获取 name 属性的值:

>>> doc = libxml2.parseDoc(open('input.xml').read())
>>> str(doc.xpathEval('//person/@name')[0].children)
'bob'

我以前从未使用过 libxml2 模块,因此可能有更好的方法。我总是使用 lxml etree 模块,使用它我们可以完成同样的事情,如下所示:

>>> import lxml.etree as etree
>>> d = etree.parse(open('foo.xml'))
>>> d.xpath('//person/@name')[0]
'bob'

如果您可以使用它,ElementTree (etree) API 会更容易使用。

关于Python 2.7 libxml2,XPath,提取xml属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9986146/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com