次のような構造のXMLファイルがあるとしましょう。XMLをlxmlで解析する - 要素値を抽出する
私は解析する必要<?xml version="1.0" ?>
<searchRetrieveResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/zing/srw/ http://www.loc.gov/standards/sru/sru1-1archive/xml-files/srw-types.xsd" xmlns="http://www.loc.gov/zing/srw/">
<records xmlns:ns1="http://www.loc.gov/zing/srw/">
<record>
<recordData>
<record xmlns="">
<datafield tag="000">
<subfield code="a">123</subfield>
<subfield code="b">456</subfield>
</datafield>
<datafield tag="001">
<subfield code="a">789</subfield>
<subfield code="b">987</subfield>
</datafield>
</record>
</recordData>
</record>
<record>
<recordData>
<record xmlns="">
<datafield tag="000">
<subfield code="a">123</subfield>
<subfield code="b">456</subfield>
</datafield>
<datafield tag="001">
<subfield code="a">789</subfield>
<subfield code="b">987</subfield>
</datafield>
</record>
</recordData>
</record>
</records>
</searchRetrieveResponse>
:
- "サブフィールド"(上記の例では例えば123)と
- 属性値(例えば、000又は001)
lxmlとXPathを使用してそれを行う方法を知っています。私の最初のコードは以下に貼り付けられています。誰かに私に説明してもらい、値を解析する方法を教えてください。
import urllib, urllib2
from lxml import etree
url = "https://dl.dropbox.com/u/540963/short_test.xml"
fp = urllib2.urlopen(url)
doc = etree.parse(fp)
fp.close()
ns = {'xsi':'http://www.loc.gov/zing/srw/'}
for record in doc.xpath('//xsi:record', namespaces=ns):
print record.xpath("xsi:recordData/record/datafield[@tag='000']", namespaces=ns)
名前空間 'HTTPの接頭辞' xsi'を使用しているHTTPとXMLを解析することができますが、urllibは必要ありません。また
となるだろう:// www.loc.gov/zing/srw/' - これは有効ですが、通常は' xsi'が標準名前空間 'http:// www.w3.org/2001/XMLSchema-instance'のプレフィックスとして使用されます。 – MiMo