Почему этот XML-запрос не работает? - PullRequest
1 голос
/ 15 января 2010

Вот код для теста. Я не понимаю, почему первые два запроса дают результат, а третий - нет. Есть идеи?

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

Почему это работает, только если под ним есть узел?

1 Ответ

3 голосов
/ 15 января 2010

Вы получаете результат, просто 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
...