使用dom解析dom问题

使用dom解析dom问题

我这有个xml文件是这样的
<Config>
        <Global DefaultPort="8162" DefaultCommunity="public"/>
        <OperatingSystem>
                        <Linux>defaultParameters</Linux>
                        <Windows>123</Windows>
        </OperatingSystem>
        <Parameters>
                        <defaultParameters>
                                <Parameter>MEMSize</Parameter>
                        </defaultParameters>
        </Parameters>
</Config>


我想得到OperatingSystem下的Linux和他的值defaultParameters,下面是我的代码

import xml.dom.minidom

fp = open(".\Config.xml", "r")
content = fp.read()
fp.close()
content = content.decode("gb2312").encode("utf-8")
content = content.replace("encoding='gb2312'", "encoding='UTF-8'")
dom = xml.dom.minidom.parseString(content)
root = dom.documentElement
for node in root.getElementsByTagName("OperatingSystem"):
    rc = ""
    for node in node.childNodes:
        if node.nodeType in ( node.TEXT_NODE, node.CDATA_SECTION_NODE):
            rc = rc + node.data
            print rc.encode("gb2312")

运行代码输出为空,<Linux>defaultParameters</Linux>类型被认为是ELEMENT_NODE类型.
for node in root.getElementsByTagName("Linux"):
    rc = ""
    for node in node.childNodes:
        if node.nodeType in ( node.TEXT_NODE, node.CDATA_SECTION_NODE):
            rc = rc + node.data
            print rc.encode("gb2312")
我想得到OperatingSystem下的所有接点的名称和值。
import xml.dom.minidom
fp = open(".\Config.xml", "r")
content = fp.read()
fp.close()
content = content.decode("gb2312").encode("utf-8")
content = content.replace("encoding='gb2312'", "encoding='UTF-8'")
dom = xml.dom.minidom.parseString(content)
root = dom.documentElement
rc = ""
for node in root.getElementsByTagName("OperatingSystem"):
    for cnode in node.childNodes:
        if cnode.nodeType == cnode.ELEMENT_NODE:
            for c in cnode.childNodes:
                if c.nodeType in (node.TEXT_NODE, node.CDATA_SECTION_NODE):
                    rc=rc+c.data
                    print rc.encode("gb2312")
            
输出如下:
>>> defaultParameters123
不懂xml下面结果对不对?
import xml.dom.minidom
fp = open(".\Config.xml", "r")
content = fp.read()
fp.close()
content = content.decode("gb2312").encode("utf-8")
content = content.replace("encoding='gb2312'", "encoding='UTF-8'")
dom = xml.dom.minidom.parseString(content)
root = dom.documentElement
rc = ""
opnode = root.getElementsByTagName("OperatingSystem")
for cnode in opnode[0].childNodes:
    if cnode.nodeType == cnode.ELEMENT_NODE:
        for c in cnode.childNodes:
            rc=cnode.nodeName+c.data
            print  rc

输出
>>> LinuxdefaultParameters
>>>Windows123
我昨天看见你的回复,大体明白怎么取了,写了个方法。但不知道为什么node2.data的值有时候为空。

def getElement(ele,elename):

    for node1 in ele.getElementsByTagName(elename):
        for node2 in node1.childNodes:

            if node2.nodeType==node2.ELEMENT_NODE:
                getElement(node1,node2.nodeName)

            else:
                if node2.nodeType==node2.TEXT_NODE and str(node2.data).isspace()==0 :
                   print(node1.nodeName+' '+node2.data+' '+node1.parentNode.nodeName)

if __name__ == '__main__':
    dom = xml.dom.minidom.parse(".\Config.xml")#String(content)
    root = dom.documentElement

    mDict={}

    node= root.getElementsByTagName("OperatingSystem")[0]
    node1=root.getElementsByTagName("Parameters")[0]
    getElement(root,"Parameters")