我对XML很新,我想知道如何在python中解析,排序和打印val1到val4?通过我的研究,我发现xml.dom
或xml.etree
被大量使用,但我无法找到正确的函数来解析XML树并打印出我需要的东西。
<a>
<b>
<c>
<d>
<item> val1 </item>
<item> val2 </item>
<item> val3 </item>
<item> val4 </item>
</d>
</c>
</b>
</a>
答案 0 :(得分:3)
我可以推荐lxml lib:
from lxml import etree
xml = etree.XML(...)
for e in xml.xpath('//item'):
print e.text
在这里,我使用xpath查找所有“item”-tags。
你也可以写:
for e in xml.xpath('/a/b/c/d/item'):
print e.text
如果只在指定的路径中找到“item”很重要。
答案 1 :(得分:2)
我最近制作了一个小型python程序来显示某些XML文件中的一些信息。我发现使用BeautifulSoup 4使得XML非常容易解析。您可以从链接的网站下载源代码并自行安装,也可以按照文档使用bs4
或pip
安装软件包easy_install
。
使用BS4:
soup = BeautifulSoup(xmlFileORString);
for item in soup.a.b.c.d.find_all('item'):
print(item.string)
编辑:也可以为Python 2.7编译BS4,代码几乎完全相同。
答案 2 :(得分:1)
您应该找到有关XML的大量信息。这是一个非常受欢迎的标准。您应该首先熟悉Document Object Model (DOM) Level 1。大多数图书馆都是以此为基础的。
有一些非常流行的python库可用。您选择哪一个取决于您的个人需求。
lxml - 几乎是使用Python进行XML处理的事实上的标准。但坦率地说,文档很糟糕。但是只要花一点时间和精力,你就会到达那里。
beautifulsoup - BS的主要目标是不 XML处理。它的主要目的是处理可能混乱的输入(想想屏幕抓取)。它虽然有一个非常性感的API,但对你来说可能就足够了。
minidom - 包含在标准库中,我认为这是一个很大的优点。它为您提供了一种加载/编写XML文档的简单方法,并公开了上述DOM 1级规范。没有更多,没有更少。对于大多数小型/简单项目来说,这已经足够了。但是,如果您需要更高级的XML功能,如XPATH,XIincludes或XSL,或者只是速度,请查看lxml
!
希望这是你的开始。祝你好运!
答案 3 :(得分:1)
在python中使用lxml
包,因为lxml支持xpath
,这对于在xml文件上触发查询非常有帮助。从XML文件
from lxml import etree
tree = etree.parse(XML_FILE_PATH)
root = self.tree.getroot()
从xml的节点获取text
:
nodes = tree.findall("//item")
text = [node.text for node in nodes]
您将获得列表[1,2,3,4]
,之后您可以使用sorted(text)
要获取元素属性,可以使用 - :
假设<item id="2" name="abc">1</item>
entries = tree.xpath("//item[@id='2']")
您将获得{'id':2, 'name':'abc'}
entries