[Home] [By Thread] [By Date] [Recent Entries]


Hi Garland,

> XMLCooktop works with
> //b[preceding-sibling::*[self::a]]
> or
> //b[preceding-sibling::*[1][self::a]]
> or
> //b[local-name(preceding-sibling::*[1])='a']
>
> While XML-SPY works with
> //b[preceding-sibling::*[self::a]]
> but not with
> //b[preceding-sibling::*[1][self::a]]
> and doesn't work either with
> //b[local-name(preceding-sibling::*[1])='a']
>
> Interesting, which processor is wrong/right and why?

Well, the path:

  //b[preceding-sibling::*[self::a]]

should give you all the b elements (in no namespace) that follow an a
element (in no namespace), whether or not that a element is their
immediately preceding sibling or not -- it's exactly the same as:

  //b[preceding-sibling::a]

The path:

  //b[preceding-sibling::*[1][self::a]]

should give you all the b elements (in no namespace) that immediately
follow an a element (in no namespace).

The path:

  //b[local-name(preceding-sibling::*[1]) = 'a']

should give you all the b elements (in no namespace) that immediately
follow an a element (in any namespace).

If that's not what XML Spy's processor is giving you, then that
processor is wrong. I tried with Saxon, MSXML4, MSXML3, Xalan-J,
Xalan-C++, and jd.xslt and they all behaved as expected. (libxslt
didn't though.)

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member