4

「サブノード」要素の無制限の子レベルを持つことができる「ノード」を含むこの XML スニペットを検討してください。

その属性に基づいて、特定@typeの の属性を見つけたいと思います。たとえば、id が 9 の場合、上記の type="foo" を返したいとします。nodesubnode@id

<xml>
    <node type="bar">
        <subnode id="4">
            <subnode id="5"/>
        </subnode>  
        <subnode id="6"/>
    </node>
    <node type="foo">
        <subnode id="7">
            <subnode id="8">
                <subnode id="9"/>
            </subnode>
        </subnode>
        <subnode id="10"/>
    </node>
</xml>

私が思いついたE4Xですが、失敗するのは次のとおりです。

xml.node.(subnode.(@id == '8')).@type 

なぜうまくいかないのか、なんとなくわかります。より理にかなっているのは次のとおりですが、構文は失敗します(AS3で):

xml.node.(..subnode.(@id == '8')).@type

これはどのように行うことができますか?

4

3 に答える 3

0

これを試して

for each(var node:XML in xml.node)
{
    var subnodes:XMLList = node..subnode;
    if(subnodes.(@id == '9').length() != 0)
        return node.@type;
}

編集:これでも機能するはずです:

if(node..subnode.(@id == '9').length() != 0)
于 2009-09-16T09:04:21.783 に答える
0

E4X をあきらめたので、「ハック」を使用し、代わりに ActionScript で実行しました。方法は次のとおりです。

var p:XML = xml..subnode.(attribute('id').toLowerCase() === "8")[0];

//Traverse back up to the parent "node"           
while ( p.name().toString() === "subnode" ) {
    p = p.parent();
}

Alert.show(p.@type); //Should say "foo"

混乱しているように見えますが。プレーンな E4X ソリューションには引き続き関心があります。

于 2009-09-16T08:48:57.350 に答える