Daniel Veillard schrieb: > On Sat, Feb 23, 2008 at 03:05:27AM +0100, Belgabor wrote: >> Hi everybody, >> >> I have a strange problem which I can only describe as a concurrency >> issue between the (xml) document content and the results I get from >> XPath queries. I'm working on a project where I plan to use the >> Model/Controller/View architecture, the model being a parsed xml tree >> and read/write access to it is mainly done via XPath queries. Therefore >> I'm quite worried by this issue. >> >> Here's what I do: >> >> - Read xml document >> - Create an XPath context (xmlXPathNewContext) >> - Run a query (xmlXPathEvalExpression), getting a result node >> - Create a new node (xmlNewNode), set content (xmlEncodeSpecialChars, >> xmlNodeSetContent) >> - Add new node as child to the result node (xmlAddChild) >> >> Later: >> - Create an XPath context (xmlXPathNewContext) with the same document >> - Run a query (xmlXPathEvalExpression) which checks for the content of >> the node added above in a predicate. >> - Get no result. >> >> The curious thing is (and the reason why I bring it here rather than >> think it's an issue of the c++ wrapper around libxml2 I wrote) that >> after I save the document to disk and reload it, everything works as >> expected. > > My guess is that when you modify the tree you build it wrong (I'm guessing > you're using namespaces and not properly building your tree), the output > once serialized looks fine, but the internal tree structures are wrong. > That would lead to XPath failing on the modifed tree and but succeeding > when serializing/parsing. Triple check all the pointers and namespaces > generated when using xmlAddChild. >
Right on the spot. Thanks a lot, works fine now =) _______________________________________________ xml mailing list, project page http://xmlsoft.org/ [email protected] http://mail.gnome.org/mailman/listinfo/xml
