Note that there are some explanatory texts on larger screens.

plurals
  1. POXSLT Select specific nodes below current
    primarykey
    data
    text
    <p>I am trying to solve this for someone else and have run into an issue myself.</p> <p>I have the XML:</p> <pre><code>&lt;Process&gt; &lt;name&gt;Pro1&lt;/name&gt; &lt;duration&gt;Dur1&lt;/duration&gt; &lt;time&gt;Time1&lt;/time&gt; &lt;name&gt;Pro2&lt;/name&gt; &lt;duration&gt;Dur2&lt;/duration&gt; &lt;time&gt;Time2&lt;/time&gt; &lt;name&gt;Pro3&lt;/name&gt; &lt;duration&gt;Dur3&lt;/duration&gt; &lt;time&gt;Time3&lt;/time&gt; &lt;name&gt;Pro4&lt;/name&gt; &lt;duration&gt;Dur4&lt;/duration&gt; &lt;time&gt;Time4&lt;/time&gt; &lt;name&gt;Pro5&lt;/name&gt; &lt;duration&gt;Dur5&lt;/duration&gt; &lt;time&gt;Time5&lt;/time&gt; &lt;/Process&gt; </code></pre> <p>Output:</p> <pre><code>&lt;Process&gt; &lt;Process_Info&gt; &lt;name&gt;Pro1&lt;/name&gt; &lt;duration&gt;Dur1&lt;/duration&gt; &lt;time&gt;Time1&lt;/time&gt; &lt;/Process_Info&gt; &lt;Process_Info&gt; &lt;name&gt;Pro2&lt;/name&gt; &lt;duration&gt;Dur2&lt;/duration&gt; &lt;time&gt;Time2&lt;/time&gt; &lt;/Process_Info&gt; &lt;Process_Info&gt; &lt;name&gt;Pro3&lt;/name&gt; &lt;duration&gt;Dur3&lt;/duration&gt; &lt;time&gt;Time3&lt;/time&gt; &lt;/Process_Info&gt; &lt;Process_Info&gt; &lt;name&gt;Pro4&lt;/name&gt; &lt;duration&gt;Dur4&lt;/duration&gt; &lt;time&gt;Time4&lt;/time&gt; &lt;/Process_Info&gt; &lt;Process_Info&gt; &lt;name&gt;Pro5&lt;/name&gt; &lt;duration&gt;Dur5&lt;/duration&gt; &lt;time&gt;Time5&lt;/time&gt; &lt;/Process_Info&gt; &lt;/Process&gt; </code></pre> <p>Using XSLT:</p> <pre><code>&lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt; &lt;xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/&gt; &lt;xsl:variable name ="varProcess" select ="Process"/&gt; &lt;xsl:template match="Process"&gt; &lt;xsl:element name="Process"&gt; &lt;xsl:for-each select ="name"&gt; &lt;xsl:variable name ="posName" select ="position()"/&gt; &lt;xsl:element name ="Process_Info"&gt; &lt;xsl:copy-of select ="."/&gt; &lt;xsl:copy-of select="$varProcess/duration[$posName]"/&gt; &lt;xsl:copy-of select="$varProcess/time[$posName]"/&gt; &lt;/xsl:element&gt; &lt;/xsl:for-each&gt; &lt;/xsl:element&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; </code></pre> <p>However, the <code>&lt;duration&gt;</code> and <code>&lt;time&gt;</code> nodes will not always be present and the <code>&lt;name&gt;</code> is the only guarenteed node. Therefore if one is missing my <code>position()</code> selecting fails.</p> <p>How can I change the XSLT to allow for it to work even when <code>&lt;duration&gt;</code> and/or <code>&lt;time&gt;</code> does not exist.</p> <p>My theory would be that you select the two nodes below the current name node and if they are <code>&lt;duration&gt;</code> or <code>&lt;time&gt;</code> they are copied? But not sure how that would implement either.</p> <p>Example of current output causing issue.</p> <p>Input:</p> <pre><code>&lt;Process&gt; &lt;name&gt;Pro1&lt;/name&gt; &lt;duration&gt;Dur1&lt;/duration&gt; &lt;time&gt;Time1&lt;/time&gt; &lt;name&gt;Pro2&lt;/name&gt; &lt;duration&gt;Dur2&lt;/duration&gt; &lt;time&gt;Time2&lt;/time&gt; &lt;name&gt;Pro3&lt;/name&gt; &lt;duration&gt;Dur3&lt;/duration&gt; &lt;time&gt;Time3&lt;/time&gt; &lt;name&gt;Pro4&lt;/name&gt; &lt;time&gt;Time4&lt;/time&gt; &lt;name&gt;Pro5&lt;/name&gt; &lt;duration&gt;Dur5&lt;/duration&gt; &lt;/Process&gt; </code></pre> <p>Output:</p> <pre><code>&lt;Process&gt; &lt;Process_Info&gt; &lt;name&gt;Pro1&lt;/name&gt; &lt;duration&gt;Dur1&lt;/duration&gt; &lt;time&gt;Time1&lt;/time&gt; &lt;/Process_Info&gt; &lt;Process_Info&gt; &lt;name&gt;Pro2&lt;/name&gt; &lt;duration&gt;Dur2&lt;/duration&gt; &lt;time&gt;Time2&lt;/time&gt; &lt;/Process_Info&gt; &lt;Process_Info&gt; &lt;name&gt;Pro3&lt;/name&gt; &lt;duration&gt;Dur3&lt;/duration&gt; &lt;time&gt;Time3&lt;/time&gt; &lt;/Process_Info&gt; &lt;Process_Info&gt; &lt;name&gt;Pro4&lt;/name&gt; &lt;duration&gt;Dur5&lt;/duration&gt; &lt;!-- Should be in the below process_info --&gt; &lt;time&gt;Time4&lt;/time&gt; &lt;/Process_Info&gt; &lt;Process_Info&gt; &lt;name&gt;Pro5&lt;/name&gt; &lt;/Process_Info&gt; &lt;/Process&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    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.
    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