通过Python解析XML标签并使用xml.dom.minidom替换它们

0 投票
1 回答
2597 浏览
提问于 2025-04-17 16:01

我的XML文件test.xml包含以下标签:

<?xml version="1.0" encoding="ISO-8859-1"?>
<AppName>
    <out>This is a sample output with <test>default</test> text </out>
<AppName>

我写了一段Python代码,目前做了以下事情:

from xml.dom.minidom import parseString
list = {'test':'example'}
file = open('test.xml','r')
data = file.read()
file.close()
dom = parseString(data)
if (len(dom.getElementsByTagName('out'))!=0):
    xmlTag = dom.getElementsByTagName('out')[0].toxml()
    out = xmlTag.replace('<out>','').replace('</out>','')
    print out

这个程序的输出是 这是一个带有 <test>default</test> 文本的示例输出

你会注意到我定义了一个列表,内容是 list = {'test':'example'}

我想检查输出中是否有列表里的标签,如果有,就用对应的值替换它;如果没有,就用默认值。

在这种情况下,输出应该是:

这是一个带有 example 文本的示例输出

1 个回答

1

这个代码大致能满足你的需求:

from xml.dom.minidom import parseString, getDOMImplementation

test_xml = '''<?xml version="1.0" encoding="ISO-8859-1"?>
<AppName>
    <out>This is a sample output with <test>default</test> text </out>
</AppName>'''

replacements = {'test':'example'}
dom = parseString(test_xml)
if (len(dom.getElementsByTagName('out'))!=0):
    xmlTag = dom.getElementsByTagName('out')[0]
    children =  xmlTag.childNodes
    text = ""
    for c in children:
        if c.nodeType == c.TEXT_NODE:
            text += c.data
        else:
            if c.nodeName in replacements.keys():
                text += replacements[c.nodeName]
            else: # not text, nor a listed tag
                text += c.toxml()
    print text

注意我用了 replacements 这个名字,而不是 list。在Python中,replacements 实际上是一个字典,不是列表,所以这个名字可能会让人困惑。而且 list 还是Python的一个内置函数,所以最好不要用它作为变量名。

如果你想要一个DOM对象,而不仅仅是文本,那你需要换个方法。

撰写回答