Note that there are some explanatory texts on larger screens.

plurals
  1. PODelete / Remove node from XPathNodeIterator, given an XPath
    primarykey
    data
    text
    <p>First of all, if someone has a different, perhaps shorter (or better), solution to the problem, it's welcome as well.</p> <hr> <p>I'm trying to "simply" remove (almost) duplicate elements in XSLT. There's some (metadata) nodes i don't want to include when comparing, and i couldn't figure out how do do that in XSLT so thought i'd extend it with a function removing these nodes. Like so:</p> <pre><code>&lt;xsl:for-each select="abx:removeNodes(d/df600|d/df610|d/df611|d/df630|d/df650|d/df651|d/df655, '*[@key=&amp;quot;i1&amp;quot; or @key=&amp;quot;i2&amp;quot; or key=&amp;quot;db&amp;quot;]')"&gt; &lt;xsl:if test="not(node()=preceding-sibling::*)"&gt; blah &lt;/xsl:if&gt; &lt;/xsl:for-each&gt; </code></pre> <p>And the extension, which doesn't work so well... (C#)</p> <pre><code>public XPathNodeIterator removeNodes(XPathNodeIterator p_NodeIterator, String removeXPath) { Logger Logger = new Logger("xslt"); Logger.Log("removeNodes(removeXPath={0}):", removeXPath); foreach (XPathNavigator CurrentNode in p_NodeIterator) { Logger.Log("removeNodes(): CurrentNode.OuterXml={0}.", CurrentNode.OuterXml); foreach (XPathNavigator CurrentSubNode in CurrentNode.Select(removeXPath)) { Logger.Log("removeNodes(): CurrentSubNode.OuterXml={0}.", CurrentSubNode.OuterXml); // How do i delete this node!? //CurrentSubNode.DeleteSelf(); } } return p_NodeIterator; } </code></pre> <p>My initial approach using 'CurrentSubNode.DeleteSelf();' doesn't work because it gets confused and loses its position in the XPathNavigator, causing it to only delete the first item it finds using "removeXPath". Something like a DeleteAndMoveNext() would be nice but there seems to be no such method...</p> <hr> <p>Example data:</p> <pre><code>&lt;df650&gt; &lt;df650 key="i1"&gt; &lt;/df650&gt; &lt;df650 key="i2"&gt;0&lt;/df650&gt; &lt;df650 key="a"&gt;foo&lt;/df650&gt; &lt;df650 key="x"&gt;bar&lt;/df650&gt; &lt;df650 key="db"&gt;someDB&lt;/df650&gt; &lt;df650 key="id"&gt;b2&lt;/df650&gt; &lt;df650 key="dsname"&gt;someDS&lt;/df650&gt; &lt;/df650&gt; </code></pre> <p>..and then another identical node (if you ignore the meta fields; db,id,dsname).</p> <pre><code>&lt;df650&gt; &lt;df650 key="i1"&gt; &lt;/df650&gt; &lt;df650 key="i2"&gt;0&lt;/df650&gt; &lt;df650 key="a"&gt;foo&lt;/df650&gt; &lt;df650 key="x"&gt;bar&lt;/df650&gt; &lt;df650 key="db"&gt;someOtherDB&lt;/df650&gt; &lt;df650 key="id"&gt;b2&lt;/df650&gt; &lt;df650 key="dsname"&gt;someOtherDS&lt;/df650&gt; &lt;/df650&gt; </code></pre> <p>The result should be...</p> <pre><code>&lt;df650&gt; &lt;df650 key="i1"&gt; &lt;/df650&gt; &lt;df650 key="i2"&gt;0&lt;/df650&gt; &lt;df650 key="a"&gt;foo&lt;/df650&gt; &lt;df650 key="x"&gt;bar&lt;/df650&gt; &lt;/df650&gt; </code></pre>
    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.
    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