Доброго всем дня. С python только начинаю знакомство. Поэтому сильно не пинайте. На работе поставили задачку из xml в csv перевести файлик.
В интернете нашел пример кода. Подстроил под свои задачи, ну как смог. Вроде работает. Но вложенные теги не парсит, и как до них добраться не знаю.
Подскажите. Во вложенном файле
Элемент offer основной и их много. Поля name, description, url, price, picture, vendorCode, Param - прочитываю. А вот как получить доступ к полям
их в каждом OFFER может быть от 1 до 10 штук.

Код на python вот такой. Повторюсь слино не пинайте, только учусь. Сам код нашел на просторах интренета. И под свои нужны подработал.
В интернете нашел пример кода. Подстроил под свои задачи, ну как смог. Вроде работает. Но вложенные теги не парсит, и как до них добраться не знаю.
Подскажите. Во вложенном файле
Элемент offer основной и их много. Поля name, description, url, price, picture, vendorCode, Param - прочитываю. А вот как получить доступ к полям
Код:
<color>
<title></title>
<image></image>
</color>
<color>
<title></title>
<image></image>
</color>
<color>
<title></title>
<image></image>
</color>

Код на python вот такой. Повторюсь слино не пинайте, только учусь. Сам код нашел на просторах интренета. И под свои нужны подработал.
Python:
import xml.dom.minidom
import csv
dom = xml.dom.minidom.parse("price.xml")
dom.normalize()
csvfile = open('output.csv', 'w', encoding='utf8')
fieldnames = ['name', 'description', 'picture', 'price', 'vendorCode']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
i=0
#while i < len(dom.getElementsByTagName("offer")):
while i < 10: # пока для тренировки беру первые 10 элементов
print (" ****** ", i , " ***** ") # для наглядности разграничиваю элементы
nodeArray = dom.getElementsByTagName("offer")[i]
childList=nodeArray.childNodes
j=0
s = [ii for ii in range(100)]
for child in childList:
if child.nodeType==child.TEXT_NODE:
print(child.nodeValue)
else:
if child.nodeName != "categoryId" :
s[j] = child.childNodes[0].nodeValue
#print(child.nodeName)
#print(child.childNodes[0].nodeValue)
j = j +1
s[6] = s[6].lower()
if s[6].find('скл-игр') >= 0:
writer.writerow({'name': s[0], 'description': s[1], 'picture': s[2], 'price': s[3], 'vendorCode': s[6]})
i = i + 1
csvfile.close()
Последнее редактирование: