1

这是测试用例的一些代码。我不明白为什么前两个查询会产生结果,但第三个不会。有任何想法吗?

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"  creationComplete="onInit();" >
    <mx:Script>
        <![CDATA[

private function onInit():void{
    var someXML:XML = 
        <libs>
            <library libLevel="System">
                <type typeName="Established Problem" typeID="2">
                    <template templateName="asthma" templateAbbr="asthma-fu" templateInsertDate="05/03/2004" templateID="14"/>
                    <template templateName="gastroesophageal reflux" templateAbbr="GERD" templateInsertDate="05/03/2004" templateID="15"/>
                </type>
            </library>
        </libs>;
        trace("library");
        trace(someXML.library.(@libLevel == "System"));//works as expected
        trace("type");
        trace(someXML.library.type.(@typeID == "2"));//works as expected
        trace("template");
        trace(someXML.library.type.template.(@templateID == "14"));//returns nothing
            }
        ]]>
    </mx:Script>
</mx:Application>

起作用的是,如果我在不正确查询的节点下方添加一个虚拟节点。

var someXML:XML = 
        <libs>
            <library libLevel="System">
                <type typeName="Established Problem" typeID="2">
                    <template templateName="asthma" templateAbbr="asthma-fu" templateInsertDate="05/03/2004" templateID="14">
                        <blah/>
                    </template>
                    <template templateName="gastroesophageal reflux" templateAbbr="GERD" templateInsertDate="05/03/2004" templateID="15">
                        <blah/>
                    </template>
                </type>
            </library>
        </libs>;

为什么它只有在它下面有一个节点时才有效?

4

1 回答 1

3

你得到一个结果,只是XML.toString(由 调用trace())返回简单XML节点的内容,而你的单个结果节点没有内容。(实际上,你的结果是一个单节点XMLList,所以它就像一个XML节点。)

要查看差异:

    var x:XMLList = someXML.library.type.template.(@templateID == "14");
    trace(x);                // empty string
    trace(x.toXMLString());  // expected XML node
于 2010-01-14T21:14:00.010 回答