计算包含特定子字符串的唯一 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]