Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML Python解析_Python_Xml - Fatal编程技术网

XML Python解析

XML Python解析,python,xml,Python,Xml,我还没有尝试用python解析XML,我在下面提供了XML。我需要获得以下数据Instrmt afg=“AG”和Qty Typ=“FIN”QTYL=“149”我需要AG和149 我尝试了以下方法: from xml.dom import minidom xmldoc = minidom.parse(test.xml) batch = xmldoc.getElementsByTagName('Batch')[0] rpt = batch.getElementsByTagName('PosRp

我还没有尝试用python解析XML,我在下面提供了XML。我需要获得以下数据Instrmt afg=“AG”和Qty Typ=“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(“属性名称”)
,例如:

print(sym.getAttribute("afg"), sym.getAttribute("ID"))
sym = ag.getElementsByTagName('Instrmt')
for e in sym:
    print e.getAttribute("afg")
在您的情况下,
sym
仍然是一个节点列表,而不是节点(标记),因此您可以像这样访问列表中的特定元素,例如:

print(sym.getAttribute("afg"), sym.getAttribute("ID"))
sym = ag.getElementsByTagName('Instrmt')
for e in sym:
    print e.getAttribute("afg")
或者只是:

print sym[0].getAttribute("afg")
如果您知道列表中只有一个元素

您可以使用以下表达式检查标记:

e.tagName == 'Instrmt'
请查看以下内容和规格:

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'])

我明白了:AttributeError:'NodeList'对象没有属性'getAttribute',谢谢,所以在sym上进行交互会将其转换为标记?不完全是这样,您的sym是标记的集合(列表),无论您从
getElementsByTagName
获得什么,都是一个列表,即使它只是一个元素,所以您必须将其视为列表。