计算包含特定子字符串的唯一 child-nodes
Count unique child-nodes that hold specific substring
我对 Excel 的 FILTERXML
函数有一个小查询,想 return 所有 parent <t>
节点得到更多超过 2 个唯一 child 节点,其中包含 parent 的文本 属性。想象一下:
<x>
<t>A
<s>A|x</s>
<s>A|y</s>
<s>B|y</s>
<s>B|z</s>
</t>
<t>B
<s>B|x</s>
<s>B|y</s>
<s>B|Z</s>
<s>A|x</s>
</t>
<t>C
<s>C|x</s>
<s>C|y</s>
<s>C|x</s>
<s>A|x</s>
</t>
</x>
所以我想 return 在这里 t-node B
因为这是唯一一个拥有超过 2 个独特的 childres 的 childres 持有他们的 parents 文本 属性 B
.
因此我想出了以下表达式:
//t[count(.//*[contains(.,concat(../text(),'|'))])>2]
这适用于 return B
但也适用于 return C
,因为它尚未考虑唯一值。因此我尝试扩展这个表达式:
//t[count(.//*[contains(.,concat(../text(),'|'))][.//*[not(preceding::*=.)]])>2]
但是,现在 return 没有 t-node。我的扩展表达式哪里出错了,在这种情况下如何将其修复为仅 return B
?
好吧,xpath 1.0 的奇迹......它是可行的,但看起来很丑陋:
//t[count(s[not(.= preceding-sibling::s/.)][contains(.,concat(../normalize-space(text()[1]),"|"))])>2]
我对 Excel 的 FILTERXML
函数有一个小查询,想 return 所有 parent <t>
节点得到更多超过 2 个唯一 child 节点,其中包含 parent 的文本 属性。想象一下:
<x>
<t>A
<s>A|x</s>
<s>A|y</s>
<s>B|y</s>
<s>B|z</s>
</t>
<t>B
<s>B|x</s>
<s>B|y</s>
<s>B|Z</s>
<s>A|x</s>
</t>
<t>C
<s>C|x</s>
<s>C|y</s>
<s>C|x</s>
<s>A|x</s>
</t>
</x>
所以我想 return 在这里 t-node B
因为这是唯一一个拥有超过 2 个独特的 childres 的 childres 持有他们的 parents 文本 属性 B
.
因此我想出了以下表达式:
//t[count(.//*[contains(.,concat(../text(),'|'))])>2]
这适用于 return B
但也适用于 return C
,因为它尚未考虑唯一值。因此我尝试扩展这个表达式:
//t[count(.//*[contains(.,concat(../text(),'|'))][.//*[not(preceding::*=.)]])>2]
但是,现在 return 没有 t-node。我的扩展表达式哪里出错了,在这种情况下如何将其修复为仅 return B
?
好吧,xpath 1.0 的奇迹......它是可行的,但看起来很丑陋:
//t[count(s[not(.= preceding-sibling::s/.)][contains(.,concat(../normalize-space(text()[1]),"|"))])>2]