From: pjcantin <pjc...@gm...> - 2011-03-29 13:57:12
|
Adam, Sure, here is the XQuery example that I was previously working on, and attached is one of the XML files I was testing it with (I couldn't upload the large XML attachment due to size restrictions): declare option exist:serialize "method=xhtml media-type=text/html"; let $xml_doc := request:get-parameter("filename",0) let $xml_find := request:get-parameter("xml_find",0) let $fragment := request:get-parameter("xml_replace",0) let $doc_string := concat("xmldb:exist://localhost:8080/exist/xmlrpc/", $xml_doc) let $file := doc($doc_string) let $xml_fragment := util:parse($fragment) let $xml_fragment_name := node-name($xml_fragment/*) let $xml_node_to_replace := util:eval-with-context($xml_find,$file,true()) for $x in $xml_node_to_replace return update replace $x with element {$xml_fragment_name} { if ($xml_fragment/*/text()) then $xml_fragment/*/text() else if ($xml_fragment/*/node()) then $xml_fragment/*/* else "null" } The return statement above was actually not my first choice of implementation - this is what makes the XQuery so slow, no matter if I'm updating a small XML file (3 KB) or a large XML file (20 MB). My original choice of implementation was: return update replace $x with $xml_fragment But this return statement gives me the following error: HTTP ERROR: 500 An error occurred: An error occurred: unknown node type: 9 #document What is a better workaround for what I'm trying to do? I've found that the 'update value' statement works a lot faster in this case, but I want to cover the possibility of changing nodes as well as node values. Thanks in advance for your help! ---Philip http://exist.2174344.n4.nabble.com/file/n3414881/small.xml small.xml -- View this message in context: http://exist.2174344.n4.nabble.com/Saxon-extension-functions-tp3412879p3414881.html Sent from the exist-open mailing list archive at Nabble.com. |