首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xml.etree.cElementTree解析XML

使用xml.etree.cElementTree解析XML
EN

Stack Overflow用户
提问于 2010-06-10 17:17:38
回答 2查看 7.6K关注 0票数 0

我在名为‘XML’的字符串中包含以下xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="ISO-8859-1"?>
<Book>
  <Page>
    <Text>Blah</Text>
  </Page>
</Book>

我试图从中获得价值,但我在使用xml.etree.cElementTree时遇到了麻烦。我已经尝试了find()和findtext()方法,但什么都没有。最终我做到了这一点:

代码语言:javascript
复制
import xml.etree.cElementTree as ET
...
root = ET.fromstring(xml)
element = root.getchildren()[0].getchildren()[0]

元素现在等于元素,这就是我想要的(无论如何对于这个解决方案),但是如何从它获得内部文本呢?element.text不工作。有什么想法吗?

编辑: element.text给我一个也没有

PS:我正在使用Python2.5ATM。

作为一个额外的问题:在python中解析xml字符串的更好方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-10 17:39:20

请解释一下“不起作用”对你意味着什么。我猜是您运行(或应该运行)的代码对我有效(Python2.x for x in (5,6)) --见下文。它甚至可以在Python2.1上工作,只需对import语句进行适当的更改。请注意,我显示element.tag是为了表明它引用了所需的元素。

代码语言:javascript
复制
>>> xml = """\
... <?xml version="1.0" encoding="ISO-8859-1"?>
... <Book>
...   <Page>
...     <Text>Blah</Text>
...   </Page>
... </Book>
... """
>>> import xml.etree.cElementTree as ET
>>> root = ET.fromstring(xml)
>>> element = root.getchildren()[0].getchildren()[0]
>>> element.tag
'Text'
>>> element.text
'Blah'
>>>

也许你想改天再回答你的额外问题,直到我们解决第一个问题;-)

票数 4
EN

Stack Overflow用户

发布于 2017-03-16 00:36:31

对于非大型.xmls (可能有几mb ),你这样做应该没问题,但如果你知道标签,只想把值作为输出,我找到了一种方法,这主要归功于http://enginerds.craftsy.com/blog/2014/04/parsing-large-xml-files-in-python-without-a-billion-gigs-of-ram.html,但我根据自己的需要对其进行了修改,甚至根本不需要xml.etree。例如:

代码语言:javascript
复制
path = 'yourxmlfilepath.xml'
tagyouwant='Headline' #just an example, i wanted the text between 'Headline' tags
opentag='<'+tagyouwant+'>'
closetag='</'+tagyouwant+'>'

with open(path,'rb') as inputfile:
    for line in inputfile:
        if opentag in line:
            strtoget=str(line)
            strtoget=strtoget.replace(opentag,"") #trimming the tags from the text
            strtoget=strtoget.replace(closetag,"")
            print strtoget

除了最后的print语句之外,您还可以对现在拥有的字符串执行您想要的操作。或者,您也可以将其作为批处理或命令行运行,并输出到.txt并存储所有的值(这实际上取决于您想要对它做什么)。

无论如何,我认为这是一种聪明的、内存高效的方法来解析巨大的xml文件,而您已经确切地知道想要从中得到什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3013108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档