Subject: Re: [xsl] XPath 1.0 challenge: select all XML Schema element declarations with type string From: "Wendell Piez wapiez@xxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Mon, 27 Jul 2015 12:16:46 -0000 |
David, this is pretty evil. In a good way. You've also answered the question I had Friday, namely where the heck is David? Cheers, Wendell On Fri, Jul 24, 2015 at 6:07 PM, David Carlisle d.p.carlisle@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: >> >> 3. The following two XPath expressions come close to solving the >> problem. However, sometimes they return an element which should not be >> returned and sometimes they don't return an element which should be >> returned. >> >> (a) //xs:element[(@type = 'string') or (substring-after(@type, ':') = 'string')] >> >> (b) //xs:element[@type= concat(substring-before(name(),'element'),'string')] >> >> I must use XPath 1.0. So which of those two XPath expressions would >> you recommend I use? > > I think you are missing the namespace axis, anyway here are three different > xpaths that give three different results, take your pick.... > > (wrapped in XSLT but no XSLT used other than acting as a container for > the xpath) > > ====================== > > <xs:schema > xmlns:xs="http://www.w3.org/2001/XMLSchema" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > > > > <xs:element id="a" type="xs:string"/> > <xs:element id="b" type="xsd:string"/> > <xs:element xmlns:xsd="http://notXMLSchema" > id="c" type="xsd:string"/> > <xs:element id="d" type="string"/> > <xs:element id="e" type="z:string"/> > <xs:element id="f" type=" xs:string "/> > > </xs:schema> > > > =================== > > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xs="http://www.w3.org/2001/XMLSchema" > > > > <xsl:output indent="yes"/> > > <xsl:template match="/"> > <x xmlns:xsd="http://www.w3.org/2001/XMLSchema"> > <aaaa> > <xsl:copy-of select="//xs:element[(@type = 'string') or > (substring-after(@type, ':') = 'string')]"/> > </aaaa> > > <bbbb> > <xsl:copy-of select="//xs:element[@type= > concat(substring-before(name(),'element'),'string')]"/> > </bbbb> > > <cccc> > <xsl:copy-of select="//xs:element[ > (normalize-space(@type) = 'string') > or > (substring-after(normalize-space(@type), ':') = 'string' > and > namespace::*[.='http://www.w3.org/2001/XMLSchema'] > [name()=substring-before(normalize-space(../@type), ':')])]"/> > </cccc> > </x> > </xsl:template> > > > ============== > > producing > > > <aaaa> > <xs:element id="a" type="xs:string"/> > <xs:element id="b" type="xsd:string"/> > <xs:element xmlns:xsd="http://notXMLSchema" id="c" type="xsd:string"/> > <xs:element id="d" type="string"/> > <xs:element id="e" type="z:string"/> > </aaaa> > <bbbb> > <xs:element id="a" type="xs:string"/> > </bbbb> > <cccc> > <xs:element id="a" type="xs:string"/> > <xs:element id="b" type="xsd:string"/> > <xs:element id="d" type="string"/> > <xs:element id="f" type=" xs:string "/> > </cccc> > > David > -- Wendell Piez | http://www.wendellpiez.com XML | XSLT | electronic publishing Eat Your Vegetables _____oo_________o_o___ooooo____ooooooo_^
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XPath 1.0 challenge: sele, David Carlisle d.p.c | Thread | Re: [xsl] XPath 1.0 challenge: sele, David Carlisle d.p.c |
Re: [xsl] XPath 1.0 challenge: sele, David Carlisle d.p.c | Date | Re: [xsl] XPath 1.0 challenge: sele, David Carlisle d.p.c |
Month |