0

解決できなかったことがあります。いくつかのレベルの階層を含む XMLList で特定のノードを検索すると、フィルターは最上位の親ノードを検索しません。

たとえば、次のようなツリーがあるとします。

<node id="a0KQ0000002PTN5MAO" parentId="">
    <node id="a0KQ0000002PT8iMAG" parentId="a0KQ0000002PTN5MAO" />
</node>

そして、私がこのような研究をした場合:

var aNode = ac_hierarchy.source..node.(@id == "a0KQ0000002PTN5MAO")[0];

結果は得られません。「aNode」はnullになります:/

アイデアはありますか?

[編集] 私が理解できない何かがあります (そして、私は 2 日間探しています :/):

以下のメソッドを使用して、ac_hierarchy にノードを再帰的に追加します。

private function add_item_to_hierarchy(node:Node_vo):XML {
    var firstNode:XML = ac_hierarchy.getItemAt(0) as XML;
    var parentNode:XML;     

    if (firstNode.@[Node_vo.att_id] == node.parentId)
        parentNode = firstNode;
    else
        parentNode = ac_hierarchy.source..node.(@[Node_vo.att_id] == node.parentId)[0];


    var test:XML = ac_hierarchy.source..node.(@[Node_vo.att_id] == node.parentId)[0];
    var test2:XML = ac_hierarchy.source..node.(@[Node_vo.att_id] == "a0KQ0000002PT8iMAG")[0];

    newXmlNode = node.toXML();

    // Add the current node to his parent node
    parentNode.appendChild(newXmlNode);
}

「node.parentId」パラメーターが「a0KQ0000002PTN5MAO」メソッドに等しい「add_item_to_hierarchy」を初めて呼び出すと、ac_hierarchy は次のようになります。

<node id="a0KQ0000002PTN5MAO" parentId="" />

var test:XML が入力されます。

var test2:XML が入力されていません。

正しくappendChildです。

2 回目では、「node.parentId」パラメーターは「a0KQ0000002PT8iMAG」に等しく、ac_hierarchy は次のようになります。

<node id="a0KQ0000002PTN5MAO" parentId="">
    <node id="a0KQ0000002PT8iMAG" parentId="a0KQ0000002PTN5MAO"/>
</node>

var test:XML が入力されます。

var test2:XML が入力されます。

また、appendChild も正しく動作します。

3 回目では、「node.parentId」パラメーターは再び「a0KQ0000002PT8iMAG」に等しくなり、ac_hierarchy は次のようになります。

<node id="a0KQ0000002PTN5MAO" parentId="">
    <node id="a0KQ0000002PT8iMAG" parentId="a0KQ0000002PTN5MAO">
        <node id="a0KQ0000002PTL9MAO"/>
    </node>
</node>

var test:XML は入力されていません。

var test2:XML が入力されます。

しかし今回は、var "test" が null です (ただし、"node.parentId" の値は前のループと同じで、test2 は正しく満たされています) !!!

私はすぐに私のコンピュータを壊します:/

ご協力いただきありがとうございます。

4

1 に答える 1

0

はい、xml セレクターはルート ノードをチェックしませんが、回避策があります。

  • 親ノードをプロキシ XMLList に取得し、検索します。

    var list:XMLList = new XMLList();
    リスト[0] = <ノードID="1"/>;
    var results:XMLList = list.(@id == "1");

  • または、親ノードを個別に確認して検索結果に追加するだけです。

于 2011-06-22T10:21:28.723 に答える