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

Reply via email to