Subject: [xsl] XPath 2.0 expression that detects a cycle of references? From: "Costello, Roger L. costello@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 25 Mar 2016 16:04:48 -0000 |
Hi Folks, This XML document has id-idref references that create a circular dependency: <document> <item id="HF"> <title>Huckleberry Finn</title> <for-more-info idref="MT"/> </item> <item id="MT"> <name>Mark Twain</name> <for-more-info idref="HF"/> </item> </document> I want an XPath expression which returns true if there is an <item> element that contains a <for-more-info> element with an idref reference that ultimately loops back around to the <item> element. For the above XML document, the XPath expression should return true. Here's an XPath expression that seems to work as desired: for $i in /document/item return for $j in $i/for-more-info return for $k in /document/item[@id eq $j/@idref] return if ($k/for-more-info/@idref eq $i/@id) then true() else () That XPath expression works fine when the cycle is between two <item> elements but it doesn't work when the cycle is between three or more <item> elements. Is there a way to write an XPath 2.0 expression to detect a cycle, regardless of how big the cycle is? /Roger This XML has a cycle between three <item> elements: <document> <item id="HF"> <title>Huckleberry Finn</title> <for-more-info idref="MT"/> </item> <item id="MT"> <name>Mark Twain</name> <for-more-info idref="SP"/> </item> <item id="SP"> <publisher>Springer</publisher> <for-more-info idref="HF"/> </item> </document>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Sebastian Rahtz, James Cummings james | Thread | Re: [xsl] XPath 2.0 expression that, Michael Kay mike@xxx |
Re: [xsl] Sebastian Rahtz, James Cummings james | Date | Re: [xsl] XPath 2.0 expression that, Michael Kay mike@xxx |
Month |