2017-02-14 3 views
0

Я пытаюсь прочитать следующий XML-код, используя python.Python using XML чтение нескольких внутренних тегов

<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', 'ACTIVE', '1.09'), ('2', 'ACTIVE', '1.19'), ('3' , 'ACTIVE', '1.19'), ('4', 'ACTIVE', '1,79')] как: 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

Привет, Это не сработало. Wonder if its, потому что я использую версию 3.x –

+0

Единственное изменение для этого кода для работы в python 3.x: 'print (pricing.getAttribute (" catalogPrice "))' Остальное все должно работать. Я только что проверил и работал в python3.5. Когда вы говорите, что это не сработало, какая ошибка вы получаете. Может быть, это поможет – Raja

Смежные вопросы