2017-02-14 3 views
0

pythonを使用して次のXMLコードを読み取ろうとしています。複数の内部タグを読み取るXMLを使用するPython

<Product productCode="2" productCategory="ABC" productClass="SOMETHING" salable="true" statusCode="ACTIVE" outage="false"> 
    <PriceList> 
     <Currency type ="NATIVE" symbol="US$"> 
      <Pricing priceCode="EATIN" catalogPrice="2.00" netPrice="2.00" tax="0.09" grossPrice="2.09"/> 
     </Currency> 
    </PriceList> 
</Product> 

私はカタログ価格を取得する必要があります。

ここに私のコードです。私はカタログ価格を取得する方法がわかりません。私はこのデータを得る方法を知らないと思う。どんな助けもありがとう。

from xml.dom import minidom 
doc = minidom.parse("US_2171_ProductPricing_20170206233707.xml") 
# doc.getElementsByTagName returns NodeList 
# name = doc.getElementsByTagName("name")[0] 
# print(name.firstChild.data) 
products = doc.getElementsByTagName("Product") 
for product in products: 
    productCodeID = product.getAttribute("productCode") 
    statusCode = product.getAttribute("statusCode") 
    catalogPrice = pricing.getElementsByTagName("catalogPrice") 
    print("productCode:%s , statusCode:%s, catalogPrice:%s" % (productCodeID, statusCode, catalogPrice)) 

答えて

0

あなたはbeautifulsoupライブラリを使用できます。これはうまくいくはずです:

from bs4 import BeautifulSoup 

xml_text = open('US_2171_ProductPricing_20170206233707.xml').read() 
soup = BeautifulSoup(xml_text, 'html.parser') 
products = soup.findAll('product') 
data = [(p['productcode'], 
     p['statuscode'], 
     p.findAll('pricing')[0]['catalogprice']) 
     for p in products] 

for items in data: 
    print(', '.join(items)) 
+0

ありがとうございます。どのように私は、中括弧と改行なしで1セットのデータを印刷するのですか [( '1'、 'ACTIVE'、 '1.09')、( '2'、 'ACTIVE'、 '1.19')、( '3' ACTIVE、1.9 ')] 1、ACTIVE、1.09(改行) 2、ACTIVE、1.19 など –

+0

回答を更新しましたデータの印刷に役立ちます。あなたが満足している場合、これを受け入れられた答えとして選択してください – AlexG

+0

@mikepatこれは、チェックマーク – AlexG

0

あなたはすでにすべてが分かっていると思います。すべての製品のすべての価格設定を取得し、それらをループします。

for product in products: 
    pricings = product.getElementsByTagName("Pricing") 
    for pricing in pricings: 
     print pricing.getAttribute("catalogPrice") 
+0

をクリックして受け入れられた回答としてこれを選択していただければ幸いです。もし私が3.xのバージョンを使用しているのであれば驚くでしょう。 –

+0

このコードがPython 3.xで動作する唯一の変更は 'print(pricing.getAttribute(" catalogPrice "))' です。私はちょうど確認し、python3.5で働いていますあなたはこれが何のエラーが発生していないと言うとき。それが助けになるかもしれない – Raja

関連する問題