3

以下のxmlを提供したPythonで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>
4

2 に答える 2

1

属性の値を抽出するには、次のように使用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")

リストに要素が1つしかないことがわかっている場合。

次のような式を使用して、タグが何であるかを確認できます。

e.tagName == 'Instrmt'
于 2013-05-07T15:18:25.627 に答える
0

ElementTreeXPATHの仕様を見てみましょう。

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
于 2013-05-07T15:38:28.767 に答える