如何检查NodeList中的两个元素是否相同?最后,我正在检查XML文件中是否存在重复的元素。
E.g。如果发生以下情况,我想抛出异常:
<type id="foo">
</type>
<type id="foo">
</type>
答案 0 :(得分:0)
原则上,使用深度相等比较每个元素,例如
for $i in $nodes
for $j in $nodes
if (deep-equal($i, $j) and not($i is $j))
then error() else ()
(这是XPath 2.0或XQuery 1.0)。
如果节点数量非常大,那么这将是低效的;更好的解决方案是将节点分组到某个散列函数上,然后只比较同一组中的节点。设计好的哈希函数可能需要了解您的数据。然后你就可以像这样使用XSLT 2.0:
<xsl:for-each-group select="$nodes" group-by="my:hash(.)">
<xsl:variable name="group" select="current-group()"/>
<xsl:sequence select="
for $i in $group
for $j in $group
if (deep-equal($i, $j) and not($i is $j))
then error() else ()"/>
</xsl:for-each-group>
这只是一个解决方案的草图;你想填补错误报告等方面的空白。