|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] Selecting everything before and after path, but without duplicated leafsJ. Zhang zhangjunte at gmail.comMon Feb 11 00:13:03 PST 2008
Hi Michael, Thanks, I will try to clear up things one by one below. On Feb 10, 2008 11:30 PM, Michael Kay <http://x-query.com/mailman/listinfo/talk> wrote: > Three points: > > (1) the preceding and following axes return each node once only. But if your > document is > > <a> > <b> > <c/> > </b> > <d/> > </a> > > then the preceding nodes of d are b and c, so if you do > > <before>{//d/preceding::*}</before> > > then the <before> element will contain a copy of b followed by a copy of c, > which means that the result will be > > <before> > <b> > <c/> > </b> > <c/> > </before> OK, this was not totally clear to me yet. It makes sense that "preceding" is first selecting the root, then all its descendants recursive-like. This is causing what I called "duplicated" leafs. I thought it would return elements from the root to the specified path, and all the elements after the path, but is returning me also nested elements, which is what I was not expecting. > (2) You haven't really explained what output you want. If the input is > > <ead> > <banana/> > <archdesc> > <dsc> > <c00/> > <c01/> > <c02/> > </dsc> > </archdesc> > <custard/> > </ead> > > what output would you like to see? I would like to preserve the original XML file, but only add an extra tag, so I would like to have this output: <ead> <banana/> <archdesc> <dsc> <c00/> <SELECT> <c01/> </SELECT> <c02/> </dsc> </archdesc> <custard/> </ead> > (3) Transformations that involve copying most of the source document to the > output unchanged while changing one or two nodes are generally easier to > code in XSLT. Unless you have external constraints on your choice of tools > (which isn't the case if you are using Saxon), then my advice is to use > XQuery for queries, XSLT for transformations. I am using XQuery because it seemed most easy for this task. I actually have another XSLT for transforming XML files. I wanted to generate a new XML file with XQuery from the old XML file, and apply a stylesheet on that new XML file. I want to keep the whole XML file, so preserve all the original structure, but just add one extra element. The reason is that I want to use XPointer or XLink for jumping directly in the XML file. I have my scripts ready, but proper XML file reconstruction is something I cannot get working yet. Thanks, jz > Michael Kay > http://www.saxonica.com/ > > > > -----Original Message----- > > From: http://x-query.com/mailman/listinfo/talk > > [mailto:http://x-query.com/mailman/listinfo/talk] On Behalf Of Junte Zhang > > Sent: 10 February 2008 11:34 > > To: http://x-query.com/mailman/listinfo/talk > > Subject: Selecting everything before and after > > path,but without duplicated leafs > > > > Hi all, > > > > I have an XML file (quite long) and I have a path to an > > element. I want to select > > (1) everything of that path and its descendants, at the same > > time I want to return everything (2) before that path, and > > everything (3) after that path. I was trying the XPath axes > > "preceding" and "following", but these axes are returning > > duplicate leafs, which is not what I want. I would like to > > reconstruct the original XML file, but with an extra tag for > > the XPath selection ($unit). > > > > This is how my XQuery looks like. > > > > let $doc := doc("file.xml") > > > > let $precedingUnit := > > $doc/ead[1]/archdesc[1]/dsc[1]/c01[1]/preceding::node() > > let $unit := $doc/ead[1]/archdesc[1]/dsc[1]/c01[1]/self::node() > > let $followingUnit := > > $doc/ead[1]/archdesc[1]/dsc[1]/c01[1]/following::node() > > return > > <out> > > <before> > > { > > $precedingUnit > > } > > </before> > > <select> > > { > > $unit > > } > > </select> > > <after> > > { > > $followingUnit > > } > > </after> > > </out> > > > > I am using XQuery with Saxon: java -cp saxon9.jar > > net.sf.saxon.Query query.xq > > > > Could you please help me? > > > > Thank you very much, I am really desperate in getting this working. > > > > Kind regards > > > > jz > > _______________________________________________ > > http://x-query.com/mailman/listinfo/talk > > http://x-query.com/mailman/listinfo/talk > >
|
Purchase Stylus Studio Online Today!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






