XML Python Parsing



我是尝试用python解析XML的新手,我提供了下面的XML。我需要得到以下数据仪表afg="AG"和Qty类型="FIN" QTYL="149"我需要AG和149.

我已经试过了:

from xml.dom import minidom
xmldoc = minidom.parse(test.xml)
batch = xmldoc.getElementsByTagName('Batch')[0]
rpt = batch.getElementsByTagName('PosRpt')
for ag in rpt:
    sym = ag.getElementsByTagName('Instrmt')
    print(sym)

当我这样做的时候,我得到一个DOM对象,不知道如何得到我想要的结果。

- <XML r="20030517" s="20042209" v="4.4" xr="FIA" xv="1">
- <Batch>
- <PosRpt RptID="175" BizDt="2013-01-03" ReqTyp="0" >
  <Pty ID="Ade" R="21" /> 
- <Pty ID="000" R="4">
  <Sub ID="F" Typ="29" /> 
  </Pty>
  <Instrmt afg="AG" ID="AG" Src="8" CFI="FFI" MMY="2013" Matf="2013"/> 
  <Qty Typ="AOD" QTYL="134" QTYS="0" /> 
  <Qty Typ="FIN" QTYL="149" QTYS="0" /> 
  <Amt Typ="FMTM" Amt="155065.44" /> 
  </PosRpt>
  </Batch>
  </XML>

使用elt.getAttribute("attribute_name")提取属性值,例如:

print(sym.getAttribute("afg"), sym.getAttribute("ID"))

在您的示例中,sym仍然是一个节点列表,而不是一个节点(标记),因此您可以像这样访问列表的特定元素,例如:

sym = ag.getElementsByTagName('Instrmt')
for e in sym:
    print e.getAttribute("afg")

或只是:

print sym[0].getAttribute("afg")

如果你知道列表中只有一个元素

你可以用一个表达式来检查你的标签是什么:

e.tagName == 'Instrmt'

看一下ElementTree和XPATH规范:

from xml.etree import ElementTree as et
data = '''
<XML r="20030517" s="20042209" v="4.4" xr="FIA" xv="1">
- <Batch>
- <PosRpt RptID="175" BizDt="2013-01-03" ReqTyp="0" >
  <Pty ID="Ade" R="21" /> 
- <Pty ID="000" R="4">
  <Sub ID="F" Typ="29" /> 
  </Pty>
  <Instrmt afg="AG" ID="AG" Src="8" CFI="FFI" MMY="2013" Matf="2013"/> 
  <Qty Typ="AOD" QTYL="134" QTYS="0" /> 
  <Qty Typ="FIN" QTYL="149" QTYS="0" /> 
  <Amt Typ="FMTM" Amt="155065.44" /> 
  </PosRpt>
  </Batch>
  </XML>
'''
#tree = et.parse('test.xml')
tree = et.fromstring(data)
# Find the first Instrmt node anywhere in the tree
print(tree.find('.//Instrmt').attrib['afg'])
# Find a Qty node with a particular attribute.
print(tree.find(".//Qty[@Typ='FIN']").attrib['QTYL'])
输出:

AG
149

最新更新