选择子节点中具有匹配但未知值的节点

时间:2016-12-02 09:27:33

标签: xpath xpath-2.0

我的XML数据源是:

foreach (var name in names)
        {
            if (regex.IsMatch(name.InnerText))
            {
                name.Remove();
                Console.WriteLine(name.InnerText);
                Console.WriteLine(count);
            }
        }

我需要选择所有具有相同的impact_level子集的impact_category节点。在示例中,我想选择Cat1和Cat 3,因为它们的子值都是“不重要的”。在完成了对这些节点的一些操作后,我需要选择下一批具有不同匹配的impact_level子集的impact_category节点(在本例中为Cat2,其值为“最低”),依此类推。

我的问题是,我不知道在运行时之前的值是什么,并且对于不同的用户它们可能会有所不同。我是一个相对XPath新手所以不知道如何做到这一点。我花了几个小时在网上和书本上看,但我发现的所有例子都假设你匹配已知值。抱歉,如果这很简单,但我真的很困难。

1 个答案:

答案 0 :(得分:0)

deep-equal函数可以让你比较子树,以便你可以选择

let $cat := /impact_categories/impact_category
return $cat[some $cat2 in ($cat except .) satisfies deep-equal(impact_levels, $cat2/impact_levels)]

impact_category元素与impact_levels深度相等的孩子归结为另一个impact_category s impact_levels

在XSLT 2.0中,您也可以对<xsl:for-each-group select="/impact_categories/impact_category" group-by="impact_levels/impact_level/name">进行分组,如果您知道只有一个这样的后代,您可以轻松地将这些元素组合在一起,如果有多个您可能想要计算指纹或使用XSLT 3.0和复合键。