基于多个参数过滤XML - Flex

时间:2012-02-07 20:54:01

标签: xml actionscript-3

我正在尝试根据我作为输入的多个参数过滤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(集合)可以提供哪些帮助吗?

1 个答案:

答案 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
   );