繁体   English   中英

解析xml树属性(文件没有元素)

[英]Parsing xml tree attributes (file has no elements)

我一直在尝试使用简约,但没有真正的偏好。 出于某种原因,lxml不会安装在我的计算机上。

我想解析一个xml文件:

<?xml version="1.
    -<transfer frmt="1" vtl="0" serial_number="E5XX-0822" date="2016-10-03 16:34:53.000" style="startstop">
        -<plateInfo>
              <plate barcode="E0122326" name="384plate" type="source"/>
              <plate barcode="A1234516" name="1536plateD" type="destination"/>
        </plateInfo>
        -<printmap total="1387">
            <w reason="" cf="13" aa="1.779" eo="299.798" tof="32.357" sv="1565.311" ct="1.627" ft="1.649" fc="88.226" memt="0.877" fldu="Percent" fld="DMSO" dy="0" dx="0" region="-1" tz="18989.481" gy="72468.649" gx="55070.768" avt="50" vt="50" vl="3.68" cvl="3.63" t="16:30:47.703" dc="0" dr="0" dn="A1" c="0" r="0" n="A1"/>
            <w reason="" cf="13" aa="1.779" eo="299.798" tof="32.357" sv="1565.311" ct="1.627" ft="1.649" fc="88.226" memt="0.877" fldu="Percent" fld="DMSO" dy="0" dx="0" region="-1" tz="18989.481" gy="72468.649" gx="55070.768" avt="50" vt="50" vl="3.68" cvl="3.63" t="16:30:47.703" dc="0" dr="0" dn="A1" c="1" r="0" n="A2"/>
        </printmap>
    </transfer>

如您所见,这些文件没有任何元素详细信息。 所有信息都包含在属性中。 在尝试改编另一个SO职位时,我有这个建议-但它似乎更适合元素。 我也没有办法很好地“浏览” xml信息,即我想说“ dir(xml_file)”,并列出了我可以在树结构上执行的所有方法的列表,或者查看了所有属性。 我知道这是很多而且可能有不同的方向,但是请先谢谢您!

def parse(files):
    for xml_file in files:
        xmldoc = minidom.parse(xml_file)
        transfer = xmldoc.getElementsByTagName('transfer')[0]
        plateInfo = transfer.getElementsByTagName('plateInfo')[0]

通过minidom,您可以使用方法属性来访问特定元素的属性,然后可以将其视为字典; 此示例迭代并打印元素transfer [0]的属性:

from xml.dom.minidom import parse, parseString
xml_file='''<?xml version="1.0" encoding="UTF-8"?>
    <transfer frmt="1" vtl="0" serial_number="E5XX-0822" date="2016-10-03 16:34:53.000" style="startstop">
        <plateInfo>
              <plate barcode="E0122326" name="384plate" type="source"/>
              <plate barcode="A1234516" name="1536plateD" type="destination"/>
        </plateInfo>
        <printmap total="1387">
            <w reason="" cf="13" aa="1.779" eo="299.798" tof="32.357" sv="1565.311" ct="1.627" ft="1.649" fc="88.226" memt="0.877" fldu="Percent" fld="DMSO" dy="0" dx="0" region="-1" tz="18989.481" gy="72468.649" gx="55070.768" avt="50" vt="50" vl="3.68" cvl="3.63" t="16:30:47.703" dc="0" dr="0" dn="A1" c="0" r="0" n="A1"/>
            <w reason="" cf="13" aa="1.779" eo="299.798" tof="32.357" sv="1565.311" ct="1.627" ft="1.649" fc="88.226" memt="0.877" fldu="Percent" fld="DMSO" dy="0" dx="0" region="-1" tz="18989.481" gy="72468.649" gx="55070.768" avt="50" vt="50" vl="3.68" cvl="3.63" t="16:30:47.703" dc="0" dr="0" dn="A1" c="1" r="0" n="A2"/>
        </printmap>
    </transfer>'''
xmldoc = parseString(xml_file)
transfer = xmldoc.getElementsByTagName('transfer')
attlist= transfer[0].attributes.keys()
for a in attlist:
    print transfer[0].attributes[a].name,transfer[0].attributes[a].value

您可以在这里找到更多信息:

http://www.diveintopython.net/xml_processing/attributes.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM