lxml validation and xpath id function

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Floris Bruynooghe

    lxml validation and xpath id function

    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"
    elementFormDefa ult="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(fil e('schema.xsd') )
    schema = etree.XMLSchema (schema_root)
    parser = etree.XMLParser (schema=schema)
    root = etree.fromstrin g('<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
  • Stefan Behnel

    #2
    Re: lxml validation and xpath id function

    Floris Bruynooghe wrote:
    I'm trying to use the .xpath('id("foo ")') function on an lxml tree but
    can't get it to work.
    Quick follow-up: this has been answered on the lxml mailing list:



    Stefan

    Comment

    Working...