2009-12-04 4 views
3

Мне сложно разобрать XML-файл с помощью e4X. Я могу получить информацию из тега 'version', но я не могу использовать любые вложенные теги.Анализ синтаксического анализа XML с помощью e4X & Flex 3

Не могли бы вы указать, что я делаю неправильно?

Вот XML:

<NameOfRoot xmlns="http://www.theaddress.com/file"> 
    <version>1.0</version> 
    <NameOfChild1> 
     <NameOfChild2> 
      <GeneralData> 
       <Identifier>2678</Identifier> 
      </GeneralData> 
     </NameOfChild2> 
    </NameOfChild1> 
</NameOfRoot> 

Вот код:

<mx:HTTPService id="MyService" url="data.xml" result="resultHandler(event)" resultFormat="e4x"/> 

private function resultHandler(event:ResultEvent):void { 

    XMLData = event.result as XML; 

    var ver:String = XMLData.*::version; // ver = 1.0 
    var id:String = XMLData.*::NameOfChild1.NameofChild2.GeneralData.Identifier; //empty string 
} 

ответ

11

Каждый элемент в пространстве имен в пространстве имен по умолчанию, так что вам нужно, чтобы претендовать на следующий уровень:

var id:String = XMLData.*::NameOfChild1.*::NameOfChild2.*::GeneralData.*::Identifier; 
// or 
var n:Namespace = XMLData.namespace(); 
var id:String = XMLData.n::NameOfChild.n::NameOfChild2.n::GeneralData.n::Identifier; 

Вы можете установить пространство имен по умолчанию с директивой «по умолчанию xml namespace»:

+0

Что делать, если имя ребенка является зарезервированным словом, например. Const? – Strudel

+0

Вы можете использовать более длинную форму: parent.child ("const"). См. Документацию XML-объекта actionscript: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/XML.html?filter_flex=4.1&filter_flashplayer=10.1&filter_air=2 –

Смежные вопросы