我在名为‘XML’的字符串中包含以下xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Book>
<Page>
<Text>Blah</Text>
</Page>
</Book>我试图从中获得价值,但我在使用xml.etree.cElementTree时遇到了麻烦。我已经尝试了find()和findtext()方法,但什么都没有。最终我做到了这一点:
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字符串的更好方法是什么?
发布于 2010-06-10 17:39:20
请解释一下“不起作用”对你意味着什么。我猜是您运行(或应该运行)的代码对我有效(Python2.x for x in (5,6)) --见下文。它甚至可以在Python2.1上工作,只需对import语句进行适当的更改。请注意,我显示element.tag是为了表明它引用了所需的元素。
>>> 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'
>>>也许你想改天再回答你的额外问题,直到我们解决第一个问题;-)
发布于 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。例如:
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文件,而您已经确切地知道想要从中得到什么。
https://stackoverflow.com/questions/3013108
复制相似问题