работа с пространством имен XML - PullRequest
0 голосов
/ 27 апреля 2011

Я получил структуру XML:

<xml>
    <variable>
         <values>
               <enum>
                 <value>2</value>
                 <level>high</level>
               </enum>
               <enum>
                  <value>1</value>
                  <level>medium</level>
               </enum>
               <enum>
                  <value>0</value>
                  <level>low</level>
               </enum>
          </values>
      </variable>
</xml>

Теперь я передал это в dataProvider:

namespace degro = "http://www.degro.org/td"; использовать пространство имен degro; // это связывает пространство имен

dg.dataProvider = new XMLListCollection (xml.variable.value.enum);

и полями данных сетки данных dg являются значение и уровень

но при запуске программы оно не будет отображаться ..

кто-нибудь испытывал это раньше?

Ответы [ 4 ]

1 голос
/ 27 апреля 2011

Полезная ссылка от Adobe Side Использование пространств имен XML

Вам также может понадобиться прочитать о QName объекты представляют собой полные имена элементов и атрибутов XML

Надеюсь, это поможет

0 голосов
/ 28 апреля 2011

Это сработало для меня. Проверьте это и дайте мне знать, если это поможет

<?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="application1_creationCompleteHandler(event)">
    <s:layout>
        <s:VerticalLayout/>
    </s:layout>
    <fx:Script>
        <![CDATA[

            import mx.collections.XMLListCollection;
            import mx.events.FlexEvent;

            private var ns:Namespace = new Namespace("http://www.degro.org/td");

            protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                dg.dataProvider = new XMLListCollection(dataXML.ns::variable.ns::values.ns::enum);
            }

            private function valueLabelFunction(item:Object,column:DataGridColumn):String
            {
                return item.ns::value+'';
            }

            private function levelLabelFunction(item:Object,column:DataGridColumn):String
            {
                return item.ns::level+'';
            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <fx:XML id="dataXML">
            <xml xmlns="http://www.degro.org/td">
                <variable>
                    <values>
                        <enum>
                            <value>2</value>
                            <level>high</level>
                        </enum>
                        <enum>
                            <value>1</value>
                            <level>medium</level>
                        </enum>
                        <enum>
                            <value>0</value>
                            <level>low</level>
                        </enum>
                    </values>
                </variable>
            </xml>
        </fx:XML>
    </fx:Declarations>
    <mx:DataGrid id="dg">
        <mx:columns>
            <mx:DataGridColumn headerText="Value" labelFunction="valueLabelFunction"/>
            <mx:DataGridColumn headerText="Level" labelFunction="levelLabelFunction"/>
        </mx:columns>
    </mx:DataGrid>
</s:Application>
0 голосов
/ 27 апреля 2011

Это то, как вы должны получить доступ к пространству имен XML в flex

private var degroNS:NameSpace = new NameSpace("http://www.degro.org/td");
//
//
//
dg.dataProvider = new XMLListCollection(xml.degroNS::variable.degroNS::value.degroNS::enum);//Assuming xml is the variable name for the xml
0 голосов
/ 27 апреля 2011

Размещенный вами XML не идентифицирует пространство имен. Я не из ActionScript, но на других языках программирования, если вы не укажете правильное пространство имен, сериализатор не сможет генерировать вывод.

Вам, вероятно, следует либо обновить XML, чтобы включить определение пространства имен (т.е. <xml xmlns="http://www.degro.org/td">, либо настроить поставщика на использование пустого / пустого пространства имен.

...