0

XML オブジェクト内のすべてのノードをノード名で取得する抽象メソッドを構築しようとしています。XML の構造が事前にわかりません。

したがって、このコードでは、すべての「アイテム」ノードとすべての「x」ノードのリストを取得したいと思います。

var xml:XML = <root><items><item/><item/><item><x/><item><item><x/></item></items></root>
var nodeName:String;
var list:XMLList;


list = getNodeByName(xml, "item"); // contains no results
list = getNodeByName(xml, "x"); // contains no results

// what am i doing wrong here?
public static function getNodeByName(xml:XML, nodeName:String):XMLList {
     return xml.child(nodeName);
}
4

2 に答える 2

3

メソッドの名前が示すように、指定されたパラメーターに一致するオブジェクトchildの子のリストのみを返します。特定の名前を持つオブジェクトXMLのすべての子孫 (子、孫、ひ孫など) を取得する場合は、次のメソッド を使用する必要があります。XMLdescendants

public static function getNodeByName(xml:XML, nodeName:String):XMLList {
     return xml.descendants(nodeName);
}

それが役に立てば幸い。

于 2012-05-18T06:33:47.400 に答える
1

異なる親からの同じ名前のすべてのノードを1つのXML構造に結合しますか?その場合、あなたができることはこれです:

    public static function getNodesByName(myXML_:XMLList, nodeName_:String) : XMLList {
        var result:XMLList = new XMLList();
        for (var i1:Number = 0; i1 < myXML_.children().length(); i1++ ) {
            if (myXML_.children()[i1].name() == nodeName_) {
                result += myXML_.children()[i1].valueOf();
            } else if (myXML_.children()[i1].children()) { 
                result += getNodesByName(XMLList(myXML_.children()[i1].valueOf()), nodeName_);
            }
        }
        return result;
    }

名前が指定されているすべてのノードを含むXMLListが返されます。次のように使用します。

var nodesList:XMLList = getNodesByName(myXML.children(), "myNodeName").valueOf();

そのリストをXMLに変換したい場合は、次のようにします。

var myXMLListTurnedIntoXML:XML = XML("<xml></xml>");
myXMLListTurnedIntoXML.appendChild(getNodesByName(myXML.children(), "myNodeName").valueOf());

それがお役に立てば幸いです。

于 2012-05-18T11:39:35.513 に答える