Note that there are some explanatory texts on larger screens.

plurals
  1. POXSL1.0 Generate Ascending Seq #
    primarykey
    data
    text
    <p>I'm using XSL1.0. My editor/debugger is OxygenXML with Saxon (OxygenXML can't debug with MSXML) and it will deployed to work with a 3rd party app that only uses MSXML. This means I can't use a variable containing a nodeset if I want to be able to debug.</p> <p>The problem could <em>probably</em> be expressed as how to sequentially number output of the following - </p> <pre><code>&lt;xsl:for-each select="node1"&gt; &lt;xsl:variable name="current_ID" select="ID"&gt; &lt;xsl:for-each select="sub_node1"&gt; &lt;xsl:value-of select="../ID"/&gt;-&lt;xsl:value-of select="Sub_ID"/&gt; &lt;/xsl:for-each&gt; &lt;/xsl:for-each&gt; </code></pre> <p>understanding that I cannot simply use this in my scenario:</p> <pre><code> &lt;xsl:for-each select="node1/sub_node1"&gt; &lt;xsl:value-of select="position()"/&gt; &lt;/xsl:for-each&gt; </code></pre> <p>Below is a manufactured example that shows the problem I'm trying to solve as part of a much larger XSL/XML combo. I basically need to create manufacturing instructions. All nodes in the XML with the exception of products/versions (by qty) are in the correct order and I cannot change it. I need to generate the same set of sequential numbers from 3 different XSL's. My current context will always be shipments/deliveries/delivery_products (i.e. my XSL has to process the nodes in the seq shown). I need to produce a list of products sorted by version qty and their deliveries. Each row should have a sequential no (1-4) in example below</p> <pre><code>&lt;shipments&gt; &lt;product&gt; &lt;name&gt;Product 1&lt;/name&gt; &lt;prod_id&gt;P1&lt;/prod_id&gt; &lt;version&gt; &lt;version_id&gt;P1_V1&lt;/version_id&gt; &lt;qty&gt;8800&lt;/qty&gt; &lt;/version&gt; &lt;version&gt; &lt;version_id&gt;P1_V2&lt;/version_id&gt; &lt;qty&gt;1100&lt;/qty&gt; &lt;/version&gt; &lt;version&gt; &lt;version_id&gt;P1_V3&lt;/version_id&gt; &lt;qty&gt;100&lt;/qty&gt; &lt;/version&gt; &lt;/product&gt; &lt;product&gt; &lt;name&gt;Product 2&lt;/name&gt; &lt;prod_id&gt;P2&lt;/prod_id&gt; &lt;version&gt; &lt;version_id&gt;P2_V1&lt;/version_id&gt; &lt;qty&gt;5000&lt;/qty&gt; &lt;/version&gt; &lt;version&gt; &lt;version_id&gt;P2_V2&lt;/version_id&gt; &lt;qty&gt;5000&lt;/qty&gt; &lt;/version&gt; &lt;version&gt; &lt;version_id&gt;P2_V3&lt;/version_id&gt; &lt;qty&gt;2000&lt;/qty&gt; &lt;/version&gt; &lt;/product&gt; &lt;deliveries&gt; &lt;del_id&gt;1&lt;/del_id&gt; &lt;destination&gt;Miami&lt;/destination&gt; &lt;delivery_products&gt; &lt;version_id&gt;P1_V1&lt;/version_id&gt; &lt;qty&gt;8000&lt;/qty&gt; &lt;/delivery_products&gt; &lt;delivery_products&gt; &lt;version_id&gt;P2_V1&lt;/version_id&gt; &lt;qty&gt;5000&lt;/qty&gt; &lt;/delivery_products&gt; &lt;/deliveries&gt; &lt;deliveries&gt; &lt;del_id&gt;2&lt;/del_id&gt; &lt;destination&gt;New York&lt;/destination&gt; &lt;delivery_products&gt; &lt;version_id&gt;P1_V1&lt;/version_id&gt; &lt;qty&gt;800&lt;/qty&gt; &lt;/delivery_products&gt; &lt;delivery_products&gt; &lt;version_id&gt;P2_V2&lt;/version_id&gt; &lt;qty&gt;1000&lt;/qty&gt; &lt;/delivery_products&gt; &lt;/deliveries&gt; </code></pre> <p></p> <p>Expected output is below. Note seq # starts from 1 and counts up to 4</p> <pre><code> &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;td class="col_head"&gt; Seq &lt;/td&gt; &lt;td class="col_head"&gt; Version &lt;/td&gt; &lt;td class="col_head"&gt; Destination &lt;/td&gt; &lt;td class="col_head"&gt; Qty &lt;/td&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tr&gt; &lt;td colspan="4" class="rev_heading"&gt;Product 1&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;1&lt;/td&gt; &lt;td&gt;P1_V1&lt;/td&gt; &lt;td&gt;Miami&lt;/td&gt; &lt;td&gt;8000&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;2&lt;/td&gt; &lt;td&gt;P1_V1&lt;/td&gt; &lt;td&gt;New York&lt;/td&gt; &lt;td&gt;800&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td colspan="4" class="rev_heading"&gt;Product 2&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;3&lt;/td&gt; &lt;td&gt;P2_V1&lt;/td&gt; &lt;td&gt;Miami&lt;/td&gt; &lt;td&gt;5000&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;4&lt;/td&gt; &lt;td&gt;P2_V2&lt;/td&gt; &lt;td&gt;New York&lt;/td&gt; &lt;td&gt;5000&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; </code></pre> <p>Here's my XSL so far (just stuck a position() in for a place holder for the seq #)</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"&gt; &lt;xsl:output method="html" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/&gt; &lt;xsl:template match="shipments"&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;Seq Test&lt;/title&gt; &lt;style type="text/css"&gt; table {border: 1px solid black; border-collapse: collapse;} td {border: 1px solid black; padding: 1px 5px 1px 5px;} .col_head {font-weight: 600;} .rev_heading {color: red; text-align: center; padding-top: 15px;} &lt;/style&gt; &lt;/head&gt; &lt;body&gt; &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;!-- SEQ# --&gt; &lt;td class="col_head"&gt; Seq &lt;/td&gt; &lt;!-- Imprint/Version --&gt; &lt;td class="col_head"&gt; Version &lt;/td&gt; &lt;!-- Ship to --&gt; &lt;td class="col_head"&gt; Destination &lt;/td&gt; &lt;!-- Qty --&gt; &lt;td class="col_head"&gt; Qty &lt;/td&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;xsl:for-each select="product"&gt; &lt;xsl:sort data-type="number" select="qty"/&gt; &lt;xsl:for-each select="version"&gt; &lt;xsl:variable name="curr_version" select="version_id"/&gt; &lt;xsl:if test="position() = 1"&gt; &lt;tr&gt; &lt;td colspan="4" class="rev_heading"&gt; &lt;xsl:value-of select="../name"/&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/xsl:if&gt; &lt;xsl:for-each select="../../deliveries/delivery_products[version_id = $curr_version]"&gt; &lt;tr &gt; &lt;!-- SEQ# --&gt; &lt;td&gt; &lt;xsl:value-of select="position()"/&gt; &lt;/td&gt; &lt;!-- Version --&gt; &lt;td&gt; &lt;xsl:value-of select="version_id"/&gt; &lt;/td&gt; &lt;!-- Ship to --&gt; &lt;td&gt; &lt;xsl:value-of select="../destination"/&gt; &lt;/td&gt; &lt;!-- QTY --&gt; &lt;td&gt; &lt;xsl:value-of select="qty"/&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/xsl:for-each&gt; &lt;/xsl:for-each&gt; &lt;/xsl:for-each&gt; &lt;/table&gt; &lt;/body&gt; &lt;/html&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&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