2013-09-11 6 views
0

I'am работать с иерархической структурой XML, как это:Работа с XML в гибком

<employee name="AAA" group="1"..../> 
    <employee name="BBB" group="1"...> 
     <employee name="CCC" group="1".../> 
    </employee> 
    <employee name="DDD" group="0"... /> 
    <employee name="EEE" group="0"... /> 
</employee> 

Сначала мне нужно подсчитать все узлы сотрудников (в том числе корневой узел). Это должно быть: 5. Я попытался использовать xml..employee.length(), но он возвращает 4 (не включает корневой узел «AAA») Если я попробовал xml.employee.length() только возвращает 1

Затем я должен создать XMList с конкретным поиском. Например, все узлы с атрибутом group = "1"

Такая же проблема возникает, я использую: hitList: XMLList = xml..employee. (@ Group == "1") и возвращает правильный результат, но это делает не принимать во внимание корневой узел (в этом случае он должен быть включен)

Как это сделать, включая корневой узел?

Заранее спасибо

Cristian

+0

Первый тег кажется неправильным. Он не должен быть закрыт с помощью «/» – Anton

ответ

1

Проблема заключается в том, что переменная XML совпадает с корневой XML тега. Так что если вы нарушите

xml..employee.length() 

это означает, что вы анализируете все узлы под корневым узлом. Переменная xml - ваш корневой узел.

Чтобы получить правильный результат, вам нужно добавить пустой пустующий корневой узел в вашу структуру.

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" 
      minWidth="955" minHeight="600" creationComplete="init()"> 
<fx:Declarations> 
    <fx:XML id="xml" xmlns=""> 
     <root> 
      <employee name="AAA" group="1"> 
       <employee name="BBB" group="1"> 
        <employee name="CCC" group="1"/> 
       </employee> 
       <employee name="DDD" group="0"/> 
       <employee name="EEE" group="0"/> 
      </employee> 
     </root> 
    </fx:XML> 
</fx:Declarations> 

<fx:Script> 
    <![CDATA[ 
     private function init():void 
     { 
      var len:int = xml..employee.length(); //gives 5 
      var hitList:XMLList = xml..employee.(@group == "1"); //gives 3 nodes 

      trace(); 
     } 
    ]]> 
</fx:Script> 

</s:Application> 
+0

Спасибо Антон, я мог бы исправить это после вашего предложения. – Cristian