0

全部 -

我正在尝试使用以下非常简单的 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 ... 

我想迭代这段代码中的数据结构“单词”。我知道有更强大的 XML 模块可用......但现在我想用所示的模块来解决这个问题。

对此的任何帮助将不胜感激。

在此先感谢和亲切的问候-

4

4 回答 4

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']
于 2012-03-30T20:55:23.060 回答
0

似乎在您的 XML 文档中,多个word_X单词被分组在一个 xml 元素中。由于它们不是不同的 XML 元素,因此您不能这样查询。相反,您可以使用正则表达式来解析单个元素字符串
例如:假设您有wordListAsSingleStringwhich contains(如果您可以查询):

       word_1
       word_2

re.split('\s+', wordListAsSingleString)会给你单词列表。

于 2012-03-30T20:45:32.817 回答
0

如果您希望单词成为字符串,请将 .data 添加到末尾:

words = dom.getElementsByTagName( 'unigrams' )[0].childNodes[0].data
于 2012-03-30T20:53:12.720 回答
0

如果您未与“xml.dom.minidom”结婚,您可能需要查看 lxml (http://lxml.de/)

代码将是:

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

哎呀——我现在看到海报特别要求使用“xml.dom.minidom”的答案。抱歉,我们使用 lxml。你可以无视。

于 2012-03-30T20:35:07.373 回答