我有一系列xpath值和一个xml feed 。
当Feed收到时,我想通过删除不在我的xpath 数组中的节点来过滤每个xml文件。
我可以想到一种非常肮脏的方法:
1)对于xml中的每个节点,我形成了它的xpath
2)检查它是否在数组中。
3)如果没有,请删除。
有更清洁的方式吗?
答案 0 :(得分:1)
您的方法是倒退的(并且容易出错,因为任何给定节点都可以通过多个有效的XPath表达式进行选择)。你应该:
答案 1 :(得分:1)
当Feed进入时,我想通过删除来过滤每个xml文件 不在我的xpath
数组中的节点
<强>步骤1。选择未由给定XPath表达式选择的所有节点
我想通过“节点”你的意思是元素。 如果是这样,这个XPath表达式:
//*[count(. | yourExpr1 | yourExpr2 ... | yourExprN)
>
count(yourExpr1 | yourExpr2 ... | yourExprN)
]
选择XML文档中未被任何N XPath表达式选择的所有元素 yourExpr1
,yourExpr2
,...,yourExprN
如果“节点”是指元素,文本节点,处理指令节点(PI),注释节点和属性节点,请使用此XPath表达式选择N XPath表达式未选择的所有节点:
(//node() | //*/@*)
[count(. | yourExpr1 | yourExpr2 ... | yourExprN)
>
count(yourExpr1 | yourExpr2 ... | yourExprN)
]
<强>第二步。删除在步骤1中选择的所有节点。
对于上面步骤1中选择的每个节点,请使用:
node.ParentNode.RemoveChild(node);
<强>解释强>:
XPath联合运算符|
生成两个节点集的并集。因此,当应用于XML文档时,表达式yourExpr1 | yourExpr2 ... | yourExprN
将生成由N个给定XPath表达式中的任何一个选择的所有节点的集合。
节点$n
完全不属于一组节点$ns
...
count($n | $ns) > count($ns)