Я пытаюсь разобрать XML-документ, чтобы вернуть <input>
узлы, которые содержат атрибут ref
. Пример игрушки, но сам документ возвращает пустой массив, когда он должен показывать совпадение.Анализ XML с помощью lxml и elementtree
игрушка пример
import elementtree.ElementTree
from lxml import etree
tree = etree.XML('<body><input ref="blabla"><label>Cats</label></input><input ref="blabla"><label>Dogs</label></input><input ref="blabla"><label>Birds</label></input></body>')
# I can return the relevant input nodes with:
print len(tree.findall(".//input[@ref]"))
2
Но работа со следующим (пониженные) файл по каким-либо причинам не удается:
example.xml
<?xml version="1.0"?>
<h:html xmlns="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<h:head>
<h:title>A title</h:title>
</h:head>
<h:body>
<group ref="blabla">
<label>Group 1</label>
<input ref="blabla">
<label>Field 1</label>
</input>
</group>
</h:body>
</h:html>
сценарий
import elementtree.ElementTree
from lxml import etree
with open ("example.xml", "r") as myfile:
xml = myfile.read()
tree = etree.XML(xml)
print len(tree.findall(".//input[@ref]"))
0
Любая идея, почему это не удается, и как обходиться? Я думаю, что это может иметь какое-то отношение к заголовку XML. Очень благодарен за любую помощь.
Что сообщение об ошибке? Что именно не удается? – refi64