我正在尝试根据我作为输入的多个参数过滤XML。
我正在尝试识别具有匹配记录的父节点,以便我可以将它们过滤掉并进行处理。
<A>
<B1>
<C1>
<D1>111</D1>
<E1>111</E1>
<F1>
<G1>111</G1>
<H1>
<I1>111</I1>
<J1>111</J1>
</H1>
</F1>
</C1>
</B1>
<B1>
<C1>
<D1>222</D1>
<E1>333</E1>
<F1>
<G1>222</G1>
<H1>
<I1>222</I1>
<J1>222</J1>
</H1>
</F1>
</C1>
</B1>
<B1>
<C1>
<D1>333</D1>
<E1>333</E1>
<F1>
<G1>333</G1>
<H1>
<I1>333</I1>
<J1>333</J1>
</H1>
</F1>
</C1>
</B1>
</A>
假设我需要匹配节点D1和E1以及I1,但是如果所有参数都存在'AND'匹配,我需要从<B1>
得到节点以获得结果。< / p>
<B1>
<C1>
<D1>222</D1>
<E1>333</E1>
<F1>
<G1>222</G1>
<H1>
<I1>222</I1>
<J1>222</J1>
</H1>
</F1>
</C1>
</B1>
我正在尝试使用以下组合来获取数据:
xml..*.((hasOwnProperty("D1") && D1 == "222")&&hasOwnProperty("E1") && D1 == "333"))
但是认为存在一些差距。有人可以填写并告诉我哪里出错或者有更好的方法来过滤XML吗? 此外,filterFunction(集合)可以提供哪些帮助吗?
答案 0 :(得分:1)
您可以使用..
运算符,或调用其等价descendants()
来获取符合条件的所有子节点的XMLList,而不管它们在层次结构中的位置。然后,使用xml.( criteria )
,仅选择与括号内的表达式匹配的节点:
var result:XMLList = xml..B1.(
( descendants ("D1") == "222" ) &&
( descendants ("E1") == "333" ) &&
( descendants ("I1").length() > 0 ) // or any other expression
);