that's exactly what they do in Xerces as well :)
http://cvs.apache.org/viewcvs.cgi/xml-xerces/java/src/org/apache/xerces/dom/CoreDocumentImpl.java?annotate=1.62
-- dims
--- Berin Lautenbach <[EMAIL PROTECTED]> wrote:
> Dims,
>
> One of our dirty little secrets :>.
>
> Unfortunately the DOM API (regardless of level) has no way of
> registering that an attribute is of Type ID (except during parse with a
> DTD or schema). Level 2 and above have ways of finding (getElementById)
> and checking (isId), but no way of setting, other than at parse time.
>
> Given we build the document as we go and then sign, and we prefer to
> find referenced nodes by Id, we have to register them as we build.
>
> If anyone knows of a better way to register Ids as we build a document,
> I'm very open to suggestions! (If I've missed something in the API -
> let me know!)
>
> The only other thing I can think of would be to actually build our own
> register of Ids as we go. I.e. when IdResolver.getElementById is
> called, we run throught he following steps :
>
> 1. Check the internal Id register. If element is found, return.
> 2. Call Document.getElementById. If this works, register the Id in the
> xml-security register of Ids, then return.
> 3. Work down the current process of finding attributes of the right name
> (but which are not of type ID). If found, register in the xml-security
> register and continue.
>
> That way, we could register the Id ourselves when we build the document.
>
> Cheers,
> Berin
>
> Davanum Srinivas wrote:
>
> > Just found another hard-coded dependency on Xerces in IdResolver.java. Is there
> > anyway to get
> rid
> > of it?
> >
> > public static void registerElementById(Element element, String idValue) {
> > Document doc = element.getOwnerDocument();
> > ((org.apache.xerces.dom.DocumentImpl) doc).putIdentifier(idValue,
> > element);
> > }
> >
> > Thanks,
> > dims
> >
> > =====
> > Davanum Srinivas - http://webservices.apache.org/~dims/
> >
> >
>
=====
Davanum Srinivas - http://webservices.apache.org/~dims/