Subject: Re: [xsl] Q: Kaysian set difference in pure XPath statement From: Hermann Stamm-Wilbrandt <STAMMW@xxxxxxxxxx> Date: Thu, 24 Mar 2011 22:50:31 +0100 |
Michael, Wendell, thanks for your responses. The question was not on implementation but on demonstration. > What (apart from efficiency) is wrong with > > //*[count(. | //*/*) != count(//*/*)] Michael, thanks, this works perfect. I have no idea what I did wrong before my email ... $ echo "<a><b><c/></b><b><c/><c/></b></a>" | \ > xpath++ "//*[count(. | //*/*) != count(//*/*)]" - ------------------------------------------------------------------------------- <a><b><c/></b><b><c/><c/></b></a> $ Mit besten Gruessen / Best wishes, Hermann Stamm-Wilbrandt Developer, XML Compiler, L3 Fixpack team lead WebSphere DataPower SOA Appliances https://www.ibm.com/developerworks/mydeveloperworks/blogs/HermannSW/ ---------------------------------------------------------------------- IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Martin Jetter Geschaeftsfuehrung: Dirk Wittkopp Sitz der Gesellschaft: Boeblingen Registergericht: Amtsgericht Stuttgart, HRB 243294 From: Michael Kay <mike@xxxxxxxxxxxx> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Date: 03/24/2011 10:18 PM Subject: Re: [xsl] Q: Kaysian set difference in pure XPath statement On 24/03/2011 20:33, Hermann Stamm-Wilbrandt wrote: > Hello, > > I saw a question on what "//*/*" means. > The answer is simple, all nodes beside the root element node. > > This can be easily seen by this XPath expression: > $ echo "<a><b><c/></b><b><c/><c/></b></a>" | xpath++ "count(//*)-count > (//*/*)" - > 1 > $ > > Now I wanted to use Kaysian set difference method to output the > node in "//*" which is not in "//*/*", see 1a on this page: > http://www.xml.org//sites/www.xml.org/files/xslt_efficient_programming_techniques.pdf#page=3 > > But here two nodesets ($ns1, $ns2) are determined first before determining > the set (asymmetric) difference as "$ns1[count(.|$ns2)!=count($ns2)]". > > Is it possible to have that as pure XPath statement? You're using "pure XPath" to mean "XPath 1.0", which seems a bit odd to my ears.... > The problem is to jump out of the scope of "//*[. ...]". What (apart from efficiency) is wrong with //*[count(. | //*/*) != count(//*/*)] (Though it's not clear why you can't just write /*) Michael Kay Saxonica > > This does not work correctly: > $ echo "<a><b><c/></b><b><c/><c/></b></a>" | xpath++ "//*[count(.| > ancestor-or-self::*//*/*)!=count(ancestor-or-self::*//*/*)]" - > > ------------------------------------------------------------------------------- > <a><b><c/></b><b><c/><c/></b></a> > ------------------------------------------------------------------------------- > <b><c/></b> > ------------------------------------------------------------------------------- > <b><c/><c/></b> > $ > > > What is the correct XPath statement for "//* minus //*/*"? > > > [1] > https://www.ibm.com/developerworks/forums/thread.jspa?messageID=14511881#145 > 11881 > > > Mit besten Gruessen / Best wishes, > > Hermann Stamm-Wilbrandt > Developer, XML Compiler, L3 > Fixpack team lead > WebSphere DataPower SOA Appliances > https://www.ibm.com/developerworks/mydeveloperworks/blogs/HermannSW/ > ---------------------------------------------------------------------- > IBM Deutschland Research& Development GmbH > Vorsitzender des Aufsichtsrats: Martin Jetter > Geschaeftsfuehrung: Dirk Wittkopp > Sitz der Gesellschaft: Boeblingen > Registergericht: Amtsgericht Stuttgart, HRB 243294
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Q: Kaysian set difference, Michael Kay | Thread | Re: [xsl] Q: Kaysian set difference, Wendell Piez |
Re: [xsl] Q: Kaysian set difference, Wendell Piez | Date | [xsl] Convert a node-set to a strin, David Frey |
Month |