lxml validation and xpath id function
Floris Bruynooghe
floris.bruynooghe at gmail.com
Mon Jun 30 20:25:54 EDT 2008
Hi
I'm trying to use the .xpath('id("foo")') function on an lxml tree but
can't get it to work.
Given the following XML: <root><child id="foo"/></root>
And it's XMLSchema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element ref="child"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="child">
<xs:complexType>
<xs:attribute name="id" use="required" type="xs:ID"/>
</xs:complexType>
</xs:element>
</xs:schema>
Or in more readable, compact RelaxNG, form:
element root {
element child {
attribute id { xsd:ID }
}
}
Now I'm trying to parse the XML and use the .xpath() method to find
the <child/> element using the id XPath function:
from lxml import etree
schema_root = etree.parse(file('schema.xsd'))
schema = etree.XMLSchema(schema_root)
parser = etree.XMLParser(schema=schema)
root = etree.fromstring('<root><child id="foo"/></root>', parser)
root.xpath('id("foo")') --> []
I was expecting to get the <child/> element with that last statement
(well, inside a list that is), but instead I just get an empty list.
Is there anything obvious I'm doing wrong? As far as I can see the
lxml documentation says this should work.
Cheers
Floris
More information about the Python-list
mailing list