Re: [xsl] XPATH 1.0: Selecting an element attribute starting from a self:: attribute

Subject: Re: [xsl] XPATH 1.0: Selecting an element attribute starting from a self:: attribute
From: "Liam R. E. Quin liam@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 17 Jun 2015 17:59:46 -0000
On Wed, 2015-06-17 at 14:28 +0000, Malecki, Piotr piotr.malecki@xxxxxxxxxxxxxxxx wrote:
> Hello,
> 
> The question corresponds basically to XPATH 1.0 (not 2.0 , not XSL).
> 
> I have an XML like this (snippet only):
> 
> <library>
>             <catalog>
>                         <book id="_1" name="Book1"/>
>                         <book id="_2" name="Book2"/>
>                         <book id="_3" name="Book3"/>
>             </catalog>
>             <customer>
>                         <borrowed bookId="_1"/>
>                         <borrowed bookId="_2"/>
>             </customer>
> </library>
> 
> In an application (Windows WPF / XAML), my execution context is e.g. 
> the element "borrowed" (e.g. <borrowed bookId="_1"/>).
> 
> I have to find the name of the book which is referenced as bookId.
> 
> So my XPATH expression is like this:
> "//book[@id=self::*/@bookId]/@name"

> Read as: give all books whose id equals to the bookId of the current 
> node.

Although you can read it that way, remember that predicates change the 
current node for evaluating the predicate. So the current node for
  //book[anything]
will be each book element in the document.

A way to do this in pure XPath is to use two steps. First make an 
Xpath variable binding, e.g. to "this", as the borrowed book, and then 
use
    //book[@id = $this]/@name

Note also that some XPath engines can't return standalone attribute 
names, so you have to return the list of matching elements and iterate 
over them in the host language.

Liam

> 
> The Query  is executed for the "borrowed" node (execution context).
> 
> Unfortunately the expression doesn't return the result expected 
> (rather an empty set).
> 
> What is wrong in my understanding here?
> 
> Thank you
> regards
> Piotr
> 
> 
> Mit freundlichen GrC<Cen / Kind regards
> 
> Dipl.-Ing. Piotr Malecki
> 
> Systemingenieur / Systems Engineer
> Waffen und FC<hrung Systemintegration
> Weapon, Command & Control System Integration
> Operating Unit Surface Vessels
> 
> ThyssenKrupp Marine Systems GmbH
> Hermann-Blohm-Strasse 3 - 20457 Hamburg- Germany
> P:O.Box 10 07 20 - 20005 Hamburg - Germany
> 
> Phone: +49 (0) 431 / 700 2446
> Fax: +49 (0) 431 / 700 1600 2446
> 
> Mailto:piotr.malecki@xxxxxxxxxxxxxxxx
> 
> ThyssenKrupp Marine Systems GmbH
> Chairman of the Supervisory Board: Dr. Hans Christoph Atzpodien 
> Executive Board: Andreas Burmester (Chairman), Dieter Rottsieper, 
> Dr. Walter Klausmann, Torsten KC6nker
> Commercial Register: District Court of Kiel HRB 6960 KI
> Registered Office: Kiel
> 
> Wie Sie wissen, kC6nnen C<ber das Internet versandte E-Mails unter 
> fremdem Namen erstellt oder der Inhalt verC$ndert werden.
> Aus diesem Grund sind unsere als E-Mail verschickten Nachrichten 
> grundsC$tzlich keine rechtsverbindlichen ErklC$rungen.
> Der Inhalt dieser E-Mail samt Anlagen ist vertraulich und u. U. 
> rechtlich geschC<tzt.
> 
> As you are aware, messages sent by e-mail can be manipulated by 
> third parties. For this reason our e-mail messages are generally not 
> legally binding.
> This electronic message (including any attachments) contains 
> confidential information and may be privileged or otherwise 
> protected from disclosure

Current Thread