Re: [xsl] Xpath to node that has a parent with a certain attribute

Subject: Re: [xsl] Xpath to node that has a parent with a certain attribute
From: "Manuel Souto Pico terminolator@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 26 Oct 2016 11:09:46 -0000
Thank you, Michael.
Cheers, Manuel


2016-10-26 12:24 GMT+02:00 Michael Kay mike@xxxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>:

>
> However, I'm curious about (and not familiar with) the *: Could you
> explain what it means? Thanks.
>
>
> *:target is XPath 2.0 syntax selecting an element with local name "target"
> in any namespace.
>
> Unfortunately with PHP and libxml you're using 15-year old XML technology
> that doesn't recognize that construct.
>
> Try Saxon/C.
>
> Michael Kay
> Saxonica
>
>
>
> Cheers, Manuel
>
>
> 2016-10-25 20:44 GMT+02:00 Eliot Kimber ekimber@xxxxxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>:
>
>> Most like the elements are in a namespace, so your match expressions will
>> not match.
>>
>> You can test that by changing "//target[parent::trans-unit[@id="xxx"]]"
>> to //*:target[parent::*:trans-unit[@id="xxx"]]
>>
>> If the @id value will be unique within the document then you can do
>> something like:
>>
>> //*[@id = 'xxx']/*:target
>>
>> Also, since you know the structure, you can replace "//", which is very
>> inefficient, with "/*/*/*" (if I've counted the ancestor levels correctly).
>>
>> Cheers,
>>
>> Eliot
>> --
>> Eliot Kimber
>> http://contrext.com
>>
>>
>>
>> From: "Manuel Souto Pico terminolator@xxxxxxxxx" <
>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
>> Reply-To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
>> Date: Tuesday, October 25, 2016 at 12:48 PM
>> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
>> Subject: [xsl] Xpath to node that has a parent with a certain attribute
>>
>> Hi there,
>>
>> I'm struggling to match a node where the parent has a particular id,
>> perhaps someone can help me.
>>
>> This is my data:
>>
>> <xliff>
>>   <file>
>>     <header/>
>>     <body>
>>     (...)
>>       <trans-unit id="xxx>
>>         <source xml:lang="en">foo</source>
>>         <target xml:lang="sl" state="zzz">bar</target>
>>       </trans-unit>
>>
>> I have parsed the file and I am trying expressions
>>
>> $xliff->xpath('//target[parent::trans-unit[@id="xxx"]]')
>>
>> and
>>
>> $xliff->xpath('//trans-unit[@id="xxx"]/target')
>>
>> but they both give me the same result:
>>
>> array(1) {
>>   [0]=>
>>   object(SimpleXMLElement)#8 (1) {
>>     ["@attributes"]=>
>>     array(1) {
>>       ["state"]=>
>>       string(22) "zzz"
>>     }
>>   }
>> }
>>
>> My expected result is "bar"
>>
>> What I doing wrong?
>>
>> I'm doing this in php 5.5.11 with libxml Version 2.9.1.
>>
>> Thank you so much.
>> Cheers, Manuel
>>
>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
>> EasyUnsubscribe <http://-list/1278982> (by email)
>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
>> EasyUnsubscribe (by email)
>>
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://-list/293509> (by email)
>
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <-list/2528023> (by
> email <>)

Current Thread