Subject: Re: [xsl] is there a way to hash an element? From: "Graydon graydon@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 10 Jun 2016 21:49:09 -0000 |
On Fri, Jun 10, 2016 at 09:30:30AM -0000, Michael Kay mike@xxxxxxxxxxxx scripsit: > If you have the opportunity to use XSLT 3.0, this might be a good use > for accumulators; these visit every node in the tree and compute a > value based on the previous value and the content of the node: in your > case the value of the accumulator could be the hash function. With 2.0 > you could achieve a similar effect using apply-templates with sibling > recursion. I might well be able to use XSLT 3.0; accumulators are unfamiliar but this looks (from a quick read) like a simple case. Just as soon as I get all the cyclic references out of the input, anyway.... > Something like this: > > <xsl:template match="*" mode="hash" as="xs:integer"> > <xsl:param name="h" as="xs:integer"/> > <xsl:apply-templates select="." mode="local-hash"> > <xsl:with-param name="h"> > <xsl:apply-templates select="following-sibling::*[1]"> > <xsl:with-param name="h"> > <xsl:apply-templates select="*[1]"> > <xsl:with-param name="h" select="$h"/> > </ > </ > </ > </ > </ > and then in mode local-hash, you can define rules for individual > elements that compute a hash for that particular element based on its > attributes and text content; each template takes the old hash value > and updates it as necessary. To combine two hash values you can use > addition, or if you prefer an XOR function which you can get from the > EXPath binary library. Thank you! That's pretty much precisely what's wanted. -- Graydon
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] is there a way to hash an, Michael Kay mike@xxx | Thread | [xsl] document-uri in MSXML, Mandar Jagtap jagman |
Re: [xsl] is there a way to hash an, Graydon graydon@xxxx | Date | Re: [xsl] is there a way to hash an, Liam R. E. Quin liam |
Month |