【问题标题】:How to retrieve an xml nodes root / top level parent如何检索xml节点根/顶级父级
【发布时间】:2012-01-03 06:21:40
【问题描述】:

您好,请问如何在 actionscript 中检索 xml 节点的顶级父节点?

    <companies>
        <company id="1" name="boo" level="1">
            <company id="2" name="hoo" level="2">
                <company id="3" name="ooo" level="3"/>
            </company>
        </company>
    </companies>

提前致谢。

【问题讨论】:

    标签: xml actionscript-3 apache-flex air flex4.5


    【解决方案1】:

    编辑(最终):

    我想我明白了您的要求:将选定的 company.(@level = 3) 作为子节点的 company.(@level = 1) 节点是什么。这也称为所选节点的“祖先”。 AS3 XML 没有强大的祖先语法,因此您必须手动向上。

    对于未知的育儿水平,请使用类似this post discuss 中的 cmets 的循环。请注意,以下代码使用id 属性进行搜索。这是因为所有ids 在单个 XML 中都必须是唯一的,因此可以保证找到 id。

    var xml:XML = <companies>
            <company id="1" name="boo" level="1">
                <company id="2" name="hoo" level="2">
                    <company id="3" name="ooo" level="3"/>
                </company>
            </company>
            <company id="4" name="boo" level="1">
                <company id="5" name="hoo" level="2">
                    <company id="6" name="ooo" level="3"/>
                </company>
            </company>
            <company id="7" name="boo" level="1">
                <company id="8" name="hoo" level="2">
                    <company id="9" name="ooo" level="3"/>
                </company>
            </company>
        </companies>
    
    // just for testing:
    var selectedNodeXML:XML = 
        <company id="8" name="hoo" level="2" />
    
    var selectedID:String = selectedNodeXML.@id;
    trace("selectedID = " + selectedID);
    
    var ancestorID:String = "";
    
    for each( var companyNode:XML in xml.elements("*") )
    {
        trace( "searching: " + companyNode.toXMLString() );  
        trace( "res: " + (companyNode..company.(@id == selectedID).@id == selectedID));
        if(
           companyNode.@id == selectedNodeXML.@id
           //|| companyNode.contains(selectedNodeXML) // You can use this if nothing gets messed up . . .
           || companyNode..company.(@id == selectedID).@id == selectedID // . . . but I think this is more reliable.
        ){
            ancestorID = companyNode.@id.toString();
            break;
        }
    }
    
    trace( "significant ancestor ID: " + ancestorID );  
    

    【讨论】:

    • 想到了那个,但是我的问题是获取所选节点的顶级父节点,例如,如果我选择了 我如何获得它的顶级父母
    • 被选中是什么意思?顶级父级始终是根,所以我不确定您要查找什么。尽你所能举例说明你在选择中拥有什么,以及父母可能是什么。
    • 感谢您的回复我正在做的是使用 flex 中的树控件,我有一个与所选 xml 节点一起使用的函数,但我的函数需要知道顶部的 id 是什么级别(级别 1)父节点。我希望这更清楚一点???
    • 这里的问题是 node.parent() 返回直接父级而不是顶级父级,换句话说,如果我选择了 node.parent() 将返回 ,但在这种情况下,我实际上需要 ,有什么想法吗??
    • 是的,这里的问题是树没有固定的深度,层次结构中可能有 10 到 15 级数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多