如何使用Python的xml.dom.minidom从XML文件中获取字符串列表?

时间:2012-03-30 20:29:11

标签: python xml minidom

全部 -

我正在尝试使用

解析以下非常简单的XML文档结构
from xml.dom.minidom import parse

XML看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
    <list>
       <file name="..." url="...">
       <words>
           word_1
           word_2
           ...

我遇到的问题是XML包含一个我想要作为字符串列表访问的单词列表......而我似乎无法正确理解它。到目前为止,我的代码就是这样:

import sys
from xml.dom.minidom import parse

for file in sys.argv[1:]:

    dom = parse( file )

    title = dom.getElementsByTagName( 'job_ad' )[0].getAttribute( 'title' )
    # This works 

    words = dom.getElementsByTagName( 'unigrams' )[0].childNodes[0]

    # This is NOT a list of strings ... 

我想在此代码中迭代数据结构'words'。我知道有更强大的XML模块可用......但是现在我想用显示的模块解决这个问题。

非常感谢任何帮助。

提前致谢并亲切问候 -

专利

4 个答案:

答案 0 :(得分:1)

我假设单词在words节点下列为纯文本,在这种情况下,您只需要从words节点获取文本并将其拆分,例如。

s="""<?xml version="1.0" encoding="utf-8"?>
    <list>
       <file name="..." url="...">
       <words>
           word_1
           word_2
        </words>
       </file>
    </list>"""

import sys
from xml.dom.minidom import parseString

dom = parseString(s)
words_text = dom.getElementsByTagName('words')[0].firstChild.nodeValue
words = words_text.split()
print words

输出:

[u'word_1', u'word_2']

答案 1 :(得分:0)

如果您未与'xml.dom.minidom'结婚,则可能需要结帐lxml(http://lxml.de/)

代码如下:

import lxml.etree
doc = lxml.etree.parse( open(file) )
words = doc.findtext('words')

WHOOPS - 我现在看到海报特别要求答案使用'xml.dom.minidom'。对不起,我们使用lxml。你可以无视。

答案 2 :(得分:0)

在您的XML文档中,多个word_X单词在xml元素中分组。由于它们不是不同的XML元素,因此您无法进行查询。相反,您可以使用正则表达式来解析单个元素字符串
例如:假设您有wordListAsSingleString包含(如果可以查询):

       word_1
       word_2

re.split('\s+', wordListAsSingleString)会为您提供单词列表。

答案 3 :(得分:0)

如果您想将单词作为字符串,请在末尾添加.data:

words = dom.getElementsByTagName( 'unigrams' )[0].childNodes[0].data