Jason, OK, thanks, that does make sense. I was kinda hoping ML would just recognise that it was a valid XML document and put the document node around it. I didnt think about the need to think of it as a sequence.
And the ZIP solution works great. I needed it to construct updated IDML files and the output now opens fine in InDesign. Thanks again, Neil. on 30/7/14 11:10 AM, Jason Hunter <[email protected]> wrote: > Ah, but you forgot the comma. :) My code has a comma between the PI and > root. > > The document node constructor takes a sequence of expressions and makes them > into a document. > > -jh- > > On Jul 30, 2014, at 5:48 PM, neil bradley <[email protected]> wrote: > >> I am not saying that the ZIP solution does not work - I expect that it > does. >> >> I am saying that the solution to construct an XML document in memory does >> not work. >> >> This does not work... >> >> document { <?hi there?><Root><?hi there?></Root> } >> >> Neil. >> >> >> >> on 30/7/14 10:32 AM, Jason Hunter <[email protected]> wrote: >> >>> I ran the exact code I sent you just now on my laptop and it worked fine. >>> The file was saved and on unzipping the file and viewing it in a text >> editor >>> I see the PI before the root node as well as inside it. >>> >>> You're saying it "does not work". I'll need you to be specific on what's >>> happening because I'm seeing it work. And definitely to make a valid >>> expression where there's a PI before the root you need the document node >>> wrapper to make it one expression not two. >>> >>> -jh- >>> >>> On Jul 30, 2014, at 5:26 PM, neil bradley <[email protected]> wrote: >>> >>>> Jason, >>>> >>>> Thanks for your answers, and I expect that your solution >>>> to the ZIP problem will help me. >>>> >>>> But I dont think you noticed that I was saying that the document node >> does >>>> NOT WORK: >>>> >>>> document { <?hi there?><Root><?hi there?></Root> } >>>> >>>> Now that is totally valid XML so I cant see why it fails. >>>> >>>> Neil. >>>> >>>> >>>> >>>> on 30/7/14 10:17 AM, Jason Hunter <[email protected]> wrote: >>>> >>>>>> Just one more point. I had thought I would solved the first, more > minor >>>>>> issue, by wrapping the XML in a document node. But that still does not >>>>>> work... >>>>>> >>>>>> document { <?hi there?><Root><?hi there?></Root> } >>>>> >>>>> Correct, because without that you were providing two independent >>>> expressions >>>>> without a comma between them. You need the document wrapper to make it >> a >>>>> single expression. >>>>> >>>>> I think there may be a bug in xdmp:zip-create() where only the root > node >>>> is >>>>> used. I was able to fix it by making the document into a string first: >>>>> >>>>> let $doc := document { >>>>> <?hi there?>, >>>>> <Root><?hi there?></Root> >>>>> } >>>>> >>>>> let $parts := <parts xmlns="xdmp:zip"><part>MyDoc.xml</part></parts> >>>>> let $zip := xdmp:zip-create($parts, text { xdmp:quote($doc) }) >>>> (: >>>>> quoted! :) >>>>> let $save := xdmp:save("/tmp/test.zip", $zip, >>>>> <options xmlns="xdmp:save"><encoding>utf8</encoding></options>) >>>>> return "fixed" >>>>> >>>>> -jh- >>>>> >>>>>> >>>>>> >>>>>> Neil. >>>>>> >>>>>> >>>>>> >>>>>> on 30/7/14 9:51 AM, neil bradley <[email protected]> wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I am having two problems with processing instructions. >>>>>>> >>>>>>> First, in general it seems I cannot create one that is before the > root >>>>>>> element. >>>>>>> >>>>>>> I can type this into QC and run it and the result is as expected: >>>>>>> >>>>>>> <?hi there?> >>>>>>> >>>>>>> I can also have one embedded in an element and again it is preserved >>>>>>> in the output: >>>>>>> >>>>>>> <Root><?hi there?></Root> >>>>>>> >>>>>>> But it seems I cannot have a PI before a root element. This does not >>>>>>> work when I enter it into QC, and I get “unexpected token syntax >>>>>>> error”: >>>>>>> >>>>>>> <?hi there?> >>>>>>> <Root><?hi there?></Root> >>>>>>> >>>>>>> However, that is a side issue to my main concern… >>>>>>> >>>>>>> I can import an XML document that has a leading PI, store it in ML, >>>>>>> and it is still there when I query the document. I can even save it >>>>>>> using xdmp:save() and the PI is still there, as I would expect. But >>>>>>> when I store the XML file in a ZIP instead, it is removed! >>>>>>> >>>>>>> Here is sample code that saves a ZIP file that removes the leading PI >>>>>>> from the document: >>>>>>> >>>>>>> let $Doc := doc("/MyDoc.xml") >>>>>>> let $Parts := <parts xmlns="xdmp:zip"><part>MyDoc.xml</part></parts> >>>>>>> let $ZIP := xdmp:zip-create($Parts, $Doc) >>>>>>> return >>>>>>> xdmp:save("c:/TEST/test.zip", $ZIP, <options >>>>>>> xmlns="xdmp:save"><encoding>utf8</encoding></options>) >>>>>>> >>>>>>> Does anyone have experience of this, and know any workaround. It is >>>>>>> really important that I preserve the PIs at the top of documents and >>>>>>> place them in a ZIP. >>>>>>> >>>>>>> Neil. >>>>>>> _______________________________________________ >>>>>>> General mailing list >>>>>>> [email protected] >>>>>>> http://developer.marklogic.com/mailman/listinfo/general >>>>>>> >>>>>>> >>>>>>> >>>>>> _______________________________________________ >>>>>> General mailing list >>>>>> [email protected] >>>>>> http://developer.marklogic.com/mailman/listinfo/general >>>>> >>>>> >>>>> >>>>> >>> >>> >>> >>> > > > > _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
