Я пытаюсь выполнить с библиотекой lxml что-то вроде этого:
http://www.xml.com/pub/a/2005/01/19/amara.html
from amara import binderytools
container = binderytools.bind_file('labels.xml')
for l in container.labels.label:
print l.name, 'of', l.address.city
но мне было труднее всего почувствовать себя мокрым! Я хочу сделать следующее: спуститься к корневому узлу с именем «X», затем спуститься к его второму дочернему элементу с именем «Y», затем захватить все его дочерние элементы с именем «Z», затем из них останутся только дочерние элементы, имеющие атрибут 'name' установлен в 'bacon', затем для каждого оставшегося узла посмотрите на все его дочерние элементы с именем 'W' и оставьте только подмножество на основе некоторого фильтра, который просматривает только дочерние элементы W с именами A, B и C. Затем Мне нужно обработать их следующим (неоптимизированным) псевдокодом:
result = []
X = root(doc(parse(xml_file_name)))
Y = X[1] # Second child
Zs = Y.children()
for Z in Zs:
if Z.name != 'bacon': continue # skip
Ws = Z.children()
record = []
assert(len(Ws) == 9)
W0 = Ws[0]
assert(W0.A == '42')
record.append(str(W0.A) + " " + W0.B + " " + W0.C))
...
W1 = Ws[1]
assert(W1.A == '256')
...
result.append(record)
Это своего рода то, чего я пытаюсь достичь. Прежде чем я попытаюсь сделать этот код чище, я бы хотел, чтобы он работал.
Пожалуйста, помогите, так как я заблудился в этом API. Дайте мне знать, если у вас есть вопросы.