Re: [xsl] Deepest element in the tree

Subject: Re: [xsl] Deepest element in the tree
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 24 Aug 2016 21:58:55 -0000
If you want to find the last (in document order) element whose depth
is equal to the maximum element depth in the document, then I believe
this is impossible to select with a single XPath 1.0 expression.

If you can use XSLT 1.0, then below is one possible solution:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

  <xsl:template match="*[not(*)]">
    <xsl:copy-of select=
    "self::*[not(//*[count(ancestor::*) > count(current()/ancestor::*)])
           and not(following::*[count(ancestor::*) >=
count(current()/ancestor::*)])
            ]

    "/>
  </xsl:template>
</xsl:stylesheet>


Cheers,
Dimitre

On Wed, Aug 24, 2016 at 12:46 PM, Rick Quatro rick@xxxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> Hi,
>
> I am trying to find the deepest, last element in an xml file. When I use
> this xpath 1.0 statement:
>
> //*[last()]
>
> it returns all nine of the last elements. I want to get the <p>4</p> element
> because it is the last of the last. Note that I don't know ahead of time
> what element name it will be. I tried this
>
> //*[last()][last()]
>
> but it still returns all of them. Any help would be appreciated. Here is my
> xml:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <topic>
>     <body>
>         <p>
>             <ul>
>                 <li>
>                     <p>1</p>
>                 </li>
>                 <li>
>                     <p>2</p>
>                 </li>
>                 <li>
>                     <p>3</p>
>                 </li>
>                 <li>
>                     <p>4</p>
>                 </li>
>             </ul>
>         </p>
>     </body>
> </topic>
>
> Rick Quatro
> Carmen Publishing Inc.
> 585-366-4017
> rick@xxxxxxxxxxxxxxx
>
>
>
> 



-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they
write all patents, too? :)
-------------------------------------
Sanity is madness put to good use.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.

Current Thread