Note that there are some explanatory texts on larger screens.

plurals
  1. POXSLT 2.0: Transforming an element including all ancestors without using a foreach
    primarykey
    data
    text
    <p>I'm currently trying to transform an XML file to several output XML files by taking certain element of it and traversing up the ancestors of the chosen elements.</p> <p>For example:</p> <p>Source XML:</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;root&gt; &lt;level_a&gt; &lt;level_b&gt; &lt;level_c&gt; &lt;level_d&gt; &lt;level_e/&gt; &lt;/level_d&gt; &lt;/level_c&gt; &lt;/level_b&gt; &lt;level_b&gt; &lt;level_c&gt; &lt;level_d&gt; &lt;level_e/&gt; &lt;/level_d&gt; &lt;/level_c&gt; &lt;/level_b&gt; &lt;level_b&gt; &lt;level_c&gt; &lt;level_d&gt; &lt;level_e/&gt; &lt;level_e/&gt; &lt;level_e/&gt; &lt;/level_d&gt; &lt;/level_c&gt; &lt;/level_b&gt; &lt;level_b&gt; &lt;level_c&gt; &lt;level_d&gt; &lt;level_d&gt; &lt;level_e/&gt; &lt;/level_d&gt; &lt;/level_d&gt; &lt;/level_c&gt; &lt;/level_b&gt; &lt;/level_a&gt; &lt;/root&gt; </code></pre> <p>Output XML files:</p> <p>1:</p> <pre><code> &lt;output&gt; &lt;output level="b"&gt; &lt;output level="c"&gt; &lt;output level="d"&gt; &lt;output level="e"/&gt; &lt;/output&gt; &lt;/output&gt; &lt;/output&gt; &lt;/output&gt; </code></pre> <p>2:</p> <pre><code> &lt;output&gt; &lt;output level="b"&gt; &lt;output level="c"&gt; &lt;output level="d"&gt; &lt;output level="e"/&gt; &lt;/output&gt; &lt;/output&gt; &lt;/output&gt; &lt;/output&gt; </code></pre> <p>3:</p> <pre><code> &lt;output&gt; &lt;output level="b"&gt; &lt;output level="c"&gt; &lt;output level="d"&gt; &lt;output level="e"/&gt; &lt;output level="e"/&gt; &lt;output level="e"/&gt; &lt;/output&gt; &lt;/output&gt; &lt;/output&gt; &lt;/output&gt; </code></pre> <p>4:</p> <pre><code> &lt;output&gt; &lt;output level="b"&gt; &lt;output level="c"&gt; &lt;output level="d"&gt; &lt;output level="d"&gt; &lt;output level="e"/&gt; &lt;/output&gt; &lt;/output&gt; &lt;/output&gt; &lt;/output&gt; &lt;/output&gt; </code></pre> <p>I know I can do something in the line of generating a sequence with following XPath:</p> <p>(//level_d[not(level_d)])[last()]/ancestor::*[self::level_c|self::level_b]</p> <p>and then iterate it with a foreach and I will get my results in the document order.</p> <p>But what I'm really interested in, is how to achieve the same without resorting to the use of a foreach, any solutions I can think of would return all elements reversed...</p> <p>Any hint are greatly appreciated<br/></p> <p>Best Regards<br/> Vlax<br/></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload