Russell,
Your first para is exactly what I do, except that
I use Xerces to do the parse, and only hit the
liaison classes when I need to do the wrapping.
For your last para - you are exactly correct. If
you take the source for Xalan from the CVS
repository you will find support for the Xerces
DOMDocument.
For your middle para, can you send us a bit more
info about what you are trying to do? It looks
like you are trying to get a UTF-16 character
into an document that is encoded with a lesser
width character (unless I am reading the code
incorrectly).
Cheers,
Berin
>
> From: "Russell C. Hadley" <[EMAIL PROTECTED]>
> Subject: Re: newbe: books/better docs/better samples.
> Date: 20/02/2003 9:12:12
> To: David N Bertoni/Cambridge/IBM <[EMAIL PROTECTED]>
> CC: [email protected]
>
> Does it make sence to use a XercesParserLiaison to parse the tree,
> then get the DOM_Document, do the mods, and then pass the modified
> document to XercesParserLiaison::createDocument to go back to a
> XalanDocument? (forgive me but I've got an older version of Xerces
> and Xalan in this product tree and I can't migrate it now.)
>
> And should I expect the Formatter routines to still work after that
> kind of transformation. As a baby step I'm trying to get through the
> above transformation and then push the DOM through the FormatterToXML
> and FormatterTreeWalker but I'm failing an assertion on m_maxCharacter
> in FormatterToXML::accumCharUTF.
>
> Another question that may just be because I've got an old tree but why
> does the Xalan source use the depricated DOM_Document and the
> deprecated parser rather than the DOMDocument and the XercesDOMParser?
> The cases I'm getting to work are with the XercesDOMParser. Thanks
>
> -R
>
> David N Bertoni/Cambridge/IBM writes:
> >
> >
> >
> >
> > Hi Russell,
> >
> > If you want to use the new classes, you'll have to get the latest code from
> > CVS, or build from a nightly CVS tarball.
> >
> > Remember the "bridge" for the Xerces DOM was written to support XSLT, which
> > views the tree as immutable. It does not like it when you change the tree
> > and use the same "bridge," so the trick is to destroy the original bridge,
> > modify the document, then create a new one _after_ you've modified the
> > document:
> >
> > 1. build Xerces document
> > 2. wrap document in bridge
> > 3. search document
> > 4. map Xalan nodes to Xerces nodes
> > 5. destroy bridge
> > 6. modify document through Xerces interface
> > 7. repeat 2-6
> >
> > Dave
> >
> >
> >
> >
>
> > "Russell C. Hadley"
>
> > <[EMAIL PROTECTED] To: Berin Lautenbach
> <[EMAIL PROTECTED]>
> > design.com> cc: "Russell
> C. Hadley" <[EMAIL PROTECTED]>, Xalan C Users
> >
> <[email protected]>, (bcc: David N Bertoni/Cambridge/IBM)
>
> > 02/18/2003 02:24 PM Subject: Re:
> newbe: books/better docs/better samples.
> >
>
> >
> >
> >
> > Berin,
> > Thanks for the reply. I'm still having problems
> > though.
> > I can't find the XercesDocumentWrapper and XercesWrapperNavigator you
> > mentioned in the online docs. So I'm working with the
> > XercesDocumentBridge and XercesBridgeNavigator (just because they're
> > the closest names). What I'm still finding is that no new nodes I've
> > added are appearing in the DOM. I can't seem to get the tinker toys
> > to go together. Some conceptual peice seems to be missing. I go from
> > XercesDOMSupport => XercesParserLiaison => XercesDocumentBridge =>
> > XercesDocumentNavigator and the DOM interface at every step will not
> > let me add nodes. The experiment I wrote in Xerces works like one
> > would expect but the moment I bring Xalan into the picture I can't
> > seem to apply changes to the DOM. (tearing out hair...)
> >
> > -R
> >
> >
> > Berin Lautenbach writes:
> > > Russell,
> > >
> > > Don't know if the following helps, it's extracted from some other code I
> >
> > > have been working on:
> > >
> > > XPathProcessorImpl xppi;
> > // The processor
> > > XercesDOMSupport xds;
> > > XercesParserLiaison xpl;
> > > XPathEvaluator xpe;
> > > XPathFactoryDefault xpf;
> > > XPathConstructionContextDefault xpcc;
> > >
> > > XalanDocument * xd;
> > >
> > > // Map to Xerces Document (document) to Xalan
> > >
> > > XalanDocument * xd;
> > > xd = xpl.createDocument(document);
> > >
> > > // For performing mapping
> > > XercesDocumentWrapper *xdw = xpl.mapDocumentToWrapper(xd);
> > > XercesWrapperNavigator xwn(xdw);
> > >
> > >
> > > ...
> > >
> > > LOTS OF STUFF TO SET UP AND GET READY FOR XPATH
> > >
> > > ...
> > >
> > > XObjectPtr xObj = xp->execute(contextNode, pr, xpec);
> > >
> > > // Now map to a list that others can use (naieve list at this time)
> > >
> > > const NodeRefListBase& lst = xObj->nodeset();
> > >
> > > int size = lst.getLength();
> > > const DOMNode *item;
> > >
> > > for (int i = 0; i < size; ++ i) {
> > >
> > > if (lst.item(i) == xd)
> > > m_XPathMap.addNode(document);
> > > else {
> > > item = xwn.mapNode(lst.item(i));
> > > m_XPathMap.addNode(item);
> > > }
> > > }
> > >
> > > Ignore the setup stuff the important part is the NodeRefListBase and
> > > reading the objects out of it.
> > >
> > > xp is an XPath object that I set up in the middle (removed) section.
> > >
> > > m_XPathMap is simly a list class that I have to hold the Xerces nodes.
> > > You could just as well use the map directly, but I need to return the
> > > list to other classes that do not understand Xalan.
> > >
> > > Hope it's usefull.
> > >
> > > Cheers,
> > > Berin
> > >
> > >
> > >
> > >
> > > Russell C. Hadley wrote:
> > >
> > > >Berin,
> > > > Thanks! Are there any code samples of this kind
> > of
> > > >transformation around? Specificly mapping back and forth.
> > > >
> > > >And your point about the ::Initialize() calls is well taken.
> > > >
> > > >Thanks again. -R
> > > >
> > > >Berin Lautenbach writes:
> > > > > Russell,
> > > > >
> > > > > Not sure exactly what you are trying to do, but some thoughts.....
> > > > >
> > > > > You want to be doing all the initialisation prior to using any
> > > > > Xalan/Xerces objects. So :
> > > > >
> > > > > XMLPlatformUtils::Initialize();
> > > > > XPathEvaluator::initialize();
> > > > >
> > > > > Should be at the start of the code, and everything else should be in
> > a
> > > > > procedure/method call or embedded in its own code block. I.e.
> > > > > {
> > > > > XercesParserLiaison theParserLiaison;
> > > > > ...
> > > > > }
> > > > >
> > > > > That way everything will be destroyed before you call terminate.
> > > > >
> > > > > Assuming you pull the Xerces DOMDocument from the ParserLiaison, any
> >
> > > > > changes you make to it will not be mirrored in the XalanDOM - the
> > map
> > > > > between is (by default) built at the point when the document is
> > created
> > > > > and is not modified after that point.
> > > > >
> > > > > I _think_ you can set it (using
> > > > > XercesParserLiaison::setBuildWrapperNodes(false)) so that the maps
> > are
> > > > > not build until called on, and that may cause nodes that you have
> > > > > created to be auto-added to the wrapper map. HOWEVER - I'd say this
> > is
> > > > > extremely unwise as modifications to existing nodes may not be
> > detected
> > > > > and deletions of nodes could get even more interesting.
> > > > >
> > > > > If you want to modify the DOM structures and then perform an XPath
> > > > > expression and continue, I've found it best to build and modify the
> > > > > document using straight Xerces calls, wrap in Xalan when I want to
> > do
> > > > > XPath and then map back to Xerces and continue. If I need to do
> > another
> > > > > XPath - I re-map to ensure any changes I have done are caught.
> > > > >
> > > > > Cheers,
> > > > > Berin
> > > > >
> > > > > Russell C. Hadley wrote:
> > > > >
> > > > > >Hi David,
> > > > > > Unsing the Xerces DOM all the function calls new complete but
> > the
> > > > > >nodes returned from create element don't seem to be well formed
> > (can't
> > > > > >be dumped with my dumper routine like everything else could) and
> > none
> > > > > >of the updates appear in the output tree generated by the
> > FormaterToXML
> > > > > >and FormatterTreeWalker.
> > > > > >
> > > > > >My initialization goes like this:
> > > > > >
> > > > > >// snip...
> > > > > >
> > > > > >XalanSourceTreeInit theSourceTreeInit;
> > > > > >XercesDOMSupport theDOMSupport;
> > > > > >
> > > > > >XercesParserLiaison theLiaison(theDOMSupport);
> > > > > >
> > > > > >XalanDocument *theDocument;
> > > > > >const LocalFileInputSource *theInputSource;
> > > > > >
> > > > > >XPathEvaluator theEvaluator;
> > > > > >
> > > > > >XalanNode* pTheContextNode;
> > > > > >
> > > > > >XMLPlatformUtils::Initialize();
> > > > > >
> > > > > >XPathEvaluator::initialize();
> > > > > >
> > > > > >pTheInputSource = new LocalFileInputSource(
> > > > > > c_wstr(XalanDOMString(filename.c_str())));
> > > > > >
> > > > > >// Parse the document...
> > > > > >theDocument =
> > > > > >
> > theLiaison.parseXMLStream(*pTheInputSource);
> > > > > >
> > > > > >
> > > > > >// OK, let's find the context node...
> > > > > >pTheContextNode =
> > > > > > theEvaluator.selectSingleNode(
> > > > > > theDOMSupport,
> > > > > > theDocument,
> > > > > > XalanDOMString("/blah").c_str(),
> > > > > > theDocument->getDocumentElement());
> > > > > >
> > > > > >
> > > > > >Then I go on to create elements through the DOM document interface
> > but
> > > > > >the nodes don't look bonafide and no changes seem to update in the
> > DOM
> > > > > >when it's output by the Formatter. (the number of children of a
> > given
> > > > > >node change though they can't be printed.)
> > > > > >
> > > > > >Any clue would be greatly appreciated. Or a pointer to a sample
> > that
> > > > > >programattically adds nodes to an existant xerces DOM. (something
> > > > > >that uses createElement and appendChild) The cases I've been able
> > to
> > > > > >track down through google (in java) arn't giving me a clue as to
> > what
> > > > > >wires could be crossed.
> > > > > >
> > > > > >Thanks.
> > > > > >
> > > > > >-R
> > > > > >
> > > > > >David N Bertoni/Cambridge/IBM writes:
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Hi Russell,
> > > > > > >
> > > > > > > > David,
> > > > > > > > One more thing. Can't seem to find the
> > > > > > > TransformToXercesDOM
> > > > > > > > sample (In either the Xerces or Xalan trees). Am I looking in
> > the
> > > > > > > > right place? (or tree?) Thanks again. -R
> > > > > > >
> > > > > > > You need the latest sources from CVS. If you've been getting
> > your sources
> > > > > > > from the CVS repository, you should make sure you use the -d
> > option when
> > > > > > > you update. If you're using a CVS tarball, get a new one.
> > > > > > >
> > > > > > > Dave
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > > >
> > > >
> > >
> >
> >
>
>
This message was sent through MyMail http://www.mymail.com.au