2016-10-20 18 views
2

xmlファイルから値に簡単にアクセスしようとしています。xmltodictを使用してxmlファイルから項目を取得する方法

<artikelen> 
    <artikel nummer="121"> 
     <code>ABC123</code> 
     <naam>Highlight pen</naam> 
     <voorraad>231</voorraad> 
     <prijs>0.56</prijs> 
    </artikel> 
    <artikel nummer="123"> 
     <code>PQR678</code> 
     <naam>Nietmachine</naam> 
     <voorraad>587</voorraad> 
     <prijs>9.99</prijs> 
    </artikel> 
..... etc 

値ABC123にアクセスしたい場合、どうすれば入手できますか?

import xmltodict 

with open('8_1.html') as fd: 
    doc = xmltodict.parse(fd.read()) 
    print(doc[fd]['code']) 

答えて

-1

.xmlファイルを読むために:あなたはに基づいて特定のコードを抽出したい場合は

for artikelobj in root.findall('artikel'): 
    print artikelobj.find('code') 

import lxml.etree as ET 
root = ET.parse(filename).getroot() 
value = root.node1.node2.variable_name.text 
+1

例: 'result = root.artikel.code.text' – Chr

+0

pythonがエラーを返すため、インポートが正しくない –

+1

エラーメッセージは何ですか? lxmlパッケージをインストールしましたか? – Chr

0

これは、あなたがこれを試すことができ xml.etreeを使用していますartikelの属性 'nummer'を入力してください。

for artikelobj in root.findall('artikel'): 
    if artikel.get('nummer') == 121: 
     print artikelobj.find('code') 

これはあなたが望むコードだけを出力します。あなたの例を使用して

5

import xmltodict 

with open('artikelen.xml') as fd: 
    doc = xmltodict.parse(fd.read()) 

あなたがdocを調べる場合は、タグによって命じ、それはOrderedDictだ表示されます:ルートノードがartikelen呼ばれ

>>> doc 
OrderedDict([('artikelen', 
       OrderedDict([('artikel', 
          [OrderedDict([('@nummer', '121'), 
              ('code', 'ABC123'), 
              ('naam', 'Highlight pen'), 
              ('voorraad', '231'), 
              ('prijs', '0.56')]), 
          OrderedDict([('@nummer', '123'), 
              ('code', 'PQR678'), 
              ('naam', 'Nietmachine'), 
              ('voorraad', '587'), 
              ('prijs', '9.99')])])]))]) 

、およびそこサブノードOrderedDictオブジェクトのリストであるartikelです。したがって、すべての記事に対してcodeが必要な場合は、次のようになります。

codes = [] 
for artikel in doc['artikelen']['artikel']: 
    codes.append(artikel['code']) 

# >>> codes 
# ['ABC123', 'PQR678'] 

あなたは、具体的nummer121あるcode場合にのみ、あなたがこれを行うことが必要な場合:

code = None 
for artikel in doc['artikelen']['artikel']: 
    if artikel['@nummer'] == '121': 
     code = artikel['code'] 
     break 

あなたがXML文書を解析し、そのような特定の値を検索したいしている場合は、言いました、私はElementTreeでサポートされているXPath expressionsの使用を検討します。

-2

XPath式を使用してlxmlパッケージを使用できます。

from lxml import etree 
f = open("8_1.html", "r") 
tree = etree.parse(f) 
expression = "/artikelen/artikel[1]/code" 
l = tree.xpath(expression) 
code = next(i.text for i in l) 
print code 

# ABC123 

ここで気づくべきことは表現です。 /artikelenはルート要素です。 /artikel[1]は、rootの下の最初のartikel要素を選択します(最初の要素はインデックス0にありません)。 /codeは、artikel[1]の子要素です。詳しくはlxmlxpath syntaxをご覧ください。

関連する問題