我有一个 xpath 值数组和一个 xml 提要。
当提要进入时,我想通过删除不在我的 xpath 数组中的节点来过滤每个 xml 文件。
我可以想到一个非常肮脏的方法来做到这一点:
1)对于xml中的每个节点,我形成它的xpath
2)检查它是否在数组中。
3)如果没有,删除。
有没有更清洁的方法?
我有一个 xpath 值数组和一个 xml 提要。
当提要进入时,我想通过删除不在我的 xpath 数组中的节点来过滤每个 xml 文件。
我可以想到一个非常肮脏的方法来做到这一点:
1)对于xml中的每个节点,我形成它的xpath
2)检查它是否在数组中。
3)如果没有,删除。
有没有更清洁的方法?
当提要进来时,我想通过删除不在我的 xpath 数组中的节点来过滤每个 xml 文件
步骤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)
]
第2步。删除在 Step1 中选择的所有节点。
对于上面第 1 步中选择的每个节点,使用:
node.ParentNode.RemoveChild(node);
说明:
XPath 联合运算符|
产生两个节点集的联合。因此,该表达式yourExpr1 | yourExpr2 ... | yourExprN
在应用于 XML 文档时会生成由 N 个给定 XPath 表达式中的任何一个选择的所有节点的集合。
一个节点$n
不属于一组节点的$ns
确切时间...
count($n | $ns) > count($ns)
您的方法是向后的(并且容易出错,因为任何给定的节点都可以通过多个有效的 XPath 表达式来选择)。你应该: