如何检索 xml 节点根/顶级父节点

发布于 2024-12-23 15:32:22 字数 353 浏览 2 评论 0原文

您好,我如何在 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>

提前致谢。

Hi how do i retrieve the top level parent of an xml node in actionscript please?

    <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>

thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

隐诗 2024-12-30 15:32:22

编辑(最终):

我想我明白了您的问题:具有所选 company.(@level = 3)company.(@level = 1) 节点是什么代码> 作为一个孩子。这也称为所选节点的“祖先”。 AS3 XML 没有强大的祖先语法,因此您必须手动向上执行。

对于未知级别的养育,请使用类似于这篇文章讨论中的评论的循环。请注意,以下代码使用 id 属性进行搜索。这是因为所有 id 在单个 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 = [email protected]();
        break;
    }
}

trace( "significant ancestor ID: " + ancestorID );  

Edit (final):

I think I get what you are asking: what is the company.(@level = 1) node that has the selected company.(@level = 3) as a child. This is also known as an "ancestor" of the selected node. AS3 XML does not have a robust ancestor syntax, so you have to step upwards manually.

For unknown levels of parenting, use a loop like the comments in this post discuss. Note that the following code uses the id attribute for searching. This is because all ids must be unique within a single XML, so you are guaranteed to find the 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 = [email protected]();
        break;
    }
}

trace( "significant ancestor ID: " + ancestorID );  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文