[
Lists Home |
Date Index |
Thread Index
]
According to the Xerces Java API it should be possible to search
an entire DOM-Document for an Element with a specific ID using
getElementById( String elementId ).
The documentation states that I have to tell the
DOM-Implementation what the name of the id-attribute is.
Either by use of a DTD or a XML Schema.
If I use a DTD to specify my id-attribute and assign it to my
XML file, getElementByID() returns an object of type Element.
If I use a XML Schema I get 'null' instead.
The FAQ-Page of the Apache-Group says about Xerces:
"According to the XML Schema specification, an instance document
might have more than one validation root and ID/IDREFS must be unique
only within the context of a particular validation root, meaning
that a document may potentially contain multiple identical ids.
In this case, the output of getElementById() is unspecified. On
the other hand, if the document root is a validation root of the
document, getElementById() should work as expected."
http://xml.apache.org/xerces2-j/faq-general.html#faq-5
Haeh???
Heres the XML- and Schema-code which I tried. Any help is welcome.
The XML file:
-------------
<?xml version="1.0" encoding="UTF-8"?>
<katalog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="catalog.xsd">
<book id="123">
<author>Steven King</author>
</book>
<book id="124">
<author>Tom Clancy</author>
</book>
</katalog>
The XML Schema:
---------------
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="katalog">
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="author" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="schluessel">
<xs:selector xpath=".//book"/>
<xs:field xpath="@id"/>
</xs:key>
</xs:element>
</xs:schema>
|