Замечание , что пересечение всегда приводит к единственному набору узлов, составленному из узлов общего между двумя исходными наборами узлов.
Также обратите внимание , что два узла с одинаковым именем и содержимым должны рассматриваться как два отдельных узла.Таким образом, /a/new/val/text()
и /a/old/val/text()
имеют одинаковое значение, но они представляют собой совершенно разные текстовые узлы.
Таким образом, ваше текущее пересечение:
/a/new/val[count(. | /a/old/val)=count(/a/old/val)]
должно вычисляться как пустой набор узлов, потому что выпересекаются два набора узлов без какого-либо общего узла (операция count()
никогда не будет совпадать).Вы делаете что-то вроде этого:
/a/new/val
∩ /a/old/val
= ∅
В то время как /a/new
∩ /a/old/preceding::new
будет производить new
.