как извлечь значения атрибута For с помощью E4X и Flex / Flash ActionScript

У меня есть XML-документ, который выглядит так

<someRoot xmlns:ix="someURL.com">
  <ns:InventoryPage Title="something">
    <ns:Inventory Id="inventory">
      <ns:InventoryView ID="inventoryView">
        <Menu>
          <ns:GridCreateActionLink Override="true" Visible="false" runat="server"/>
        </Menu>
        <Columns>
          <ns:Column For="IncidentNo" LinkTo="default"/>
          <ns:Column DisplayAs="string" For="Location"/>
          <ns:Column For="DateaTimeOccur" Format="d"/>
          <ns:Column For="Description"/>
          <ns:Column For="Workflow.PersonResponsible" displayas="string"/>
          <ns:Column For="Workflow.DueDate" Format="d"/>
          <ns:Column For="DateClosed" Format="d"/>
          <ns:Column DisplayAs="string" For="Workflow.Status"/>
    </Columns>
  </ns:InventoryView>
</ns:Inventory>

Моя цель проста: я кодирую с помощью Adobe Flex / AS3 и хочу получить все значения атрибутов FOR в тегах столбцов и сохранить их в массиве.

Предполагая, что приведенный выше код находится в объекте XML с именем xmlObj, я сделал следующее

var xmlObj:XML = new XML(theXMLAbove);

var someXMLList:XMLList = new XMLList(xmlObj);

Вот где я чесал в затылке. Я пробовал использовать e4x для получения значений. Например

trace (xmlObj.InventoryPage.Inventory.InventoryView.Columns.column[0].(@For));

или трассировка (xmlObj.column [0]. (@ For));

trace (someXMLList:XMLList .InventoryPage.Inventory.InventoryView.Columns.column[0].(@For));

или трассировка (someXMLList: XMLList .column [0]. (@ For));

Я продолжаю получать пустой список XMLList. или ноль. Я все неправильно делаю? Был бы признателен за помощь в продолжении. спасибо - Эдвард


person DJ Eddie J    schedule 17.07.2013    source источник
comment
Самая тривиальная вещь заключается в том, что это чувствительно к регистру и, согласно вашему XML-файлу, столбец [0] должен быть столбцом [0]   -  person C.O.    schedule 17.07.2013


Ответы (1)


Вам нужно быть особенно осторожным при использовании пространств имен.

var xmlObj:XML = new XML(
    <ns:someRoot xmlns:ns="http://www.someURL.com/ns-someRoot">
        <ns:InventoryPage Title="something">
            <ns:Inventory Id="inventory">
                <ns:InventoryView ID="inventoryView">
                    <Menu>
                        <ns:GridCreateActionLink Override="true" Visible="false" runat="server"/>
                    </Menu>
                    <Columns>
                        <ns:Column For="IncidentNo" LinkTo="default"/>
                        <ns:Column DisplayAs="string" For="Location"/>
                        <ns:Column For="DateaTimeOccur" Format="d"/>
                        <ns:Column For="Description"/>
                        <ns:Column For="Workflow.PersonResponsible" displayas="string"/>
                        <ns:Column For="Workflow.DueDate" Format="d"/>
                        <ns:Column For="DateClosed" Format="d"/>
                        <ns:Column DisplayAs="string" For="Workflow.Status"/>
                    </Columns>
                </ns:InventoryView>
            </ns:Inventory>
        </ns:InventoryPage>
    </ns:someRoot>
);


var theNameSpace:Namespace = xmlObj.namespace();
var columns:XMLList = xmlObj.theNameSpace::InventoryPage.theNameSpace::Inventory.theNameSpace::InventoryView.Columns.theNameSpace::Column;

trace([email protected]() )
var somelist:XMLList = columns.@For
var arr:Array = []
for each( var someFor:String in somelist){
    arr.push(someFor)
}
trace(arr)
person The_asMan    schedule 17.07.2013