On Thu, 2021-02-18 at 18:44 +0000, Wolfhart Totschnig
wolfhart(_dot_)totschnig(_at_)mail(_dot_)udp(_dot_)cl wrote:
Hello again,
Thank you, Wendell!
The proposed solutions leave me with two questions:
1) Is there a way to do what I originally had in mind, i.e., go
forward to the first non-"foo" sibling and from there go backwards,
taking all the "foo" siblings up to the current node?
XPath doesn't actually "go" ...
Asked differently, can the
following XPath expression be fixed?
following-sibling::*[not(self::source)][1]
OK, now we have either an empty sequence (we're finished, select
nothing) or we have a single element that's not called "source". I'll
call that element E
/preceding-sibling::*[self::source]
We now have all the elements whose name is source and that come before
E.
E.g. given
parent
source id="a"
sock
beer
source id="b"
source id="c"
start (the original context node, let's say)
source id="d"
source id="e"
source if="f"
e
source id="f"
the first expression found "e" and we have now found a b c d e f
[preceding-sibling::current()]
I don't know what this is supposed to mean. I think it's the magic "do
the right thing" clause :)
preceding-sibling:: is an XPath axis and in XPath 1 must be followed by
a name.
In XPath 2 you could write [. << current] to mean "comes before".
In XPath 1 there isn't a built-in way to do that, so the normal trick
is to use count()
2) Liam's and Wendell's proposals involve the expression
[name()=...],
whereas I have used [self:: ...]. Are these strictly equivalent, or
is
there a reason to prefer the one over the other?
As others have said, you have to watch out for namespaces.
(local-name(.) = 'svg') and (namespace-uri(.) eq
'http://www.w3.org/2000/svg')
is something you see a lot in XPath 1 expressions, especially outside
of XSLT.
Liam
--
Liam Quin, https://www.delightfulcomputing.com/
Available for XML/Document/Information Architecture/XSLT/
XSL/XQuery/Web/Text Processing/A11Y training, work & consulting.
Barefoot Web-slave, antique illustrations: http://www.fromoldbooks.org
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--