【问题标题】:working with namespaced XML使用命名空间的 XML
【发布时间】:2011-04-27 13:28:30
【问题描述】:

我有一个 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:

命名空间 degro ="http://www.degro.org/td"; 使用命名空间 degro; //这是绑定命名空间

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

dg datagrid的dataFields是value和level

但是当我运行程序时它不会显示..

以前有人经历过吗?

【问题讨论】:

    标签: xml apache-flex actionscript-3 flex4


    【解决方案1】:

    这是来自 Adob​​e Side Using XML namespaces 的有用链接

    您可能还需要了解QName 对象代表 XML 元素和属性的限定名称

    希望有帮助

    【讨论】:

      【解决方案2】:

      您发布的 XML 未标识命名空间。我不是动作脚本专家,但在其他编程语言中,如果您不指定正确的命名空间,序列化程序将无法生成输出。

      您可能应该更新您的 XML 以包含命名空间定义(即 &lt;xml xmlns="http://www.degro.org/td">,或者您应该将您的提供程序设置为使用空白/空命名空间。

      【讨论】:

      • 嗨,我假设 xml 是由标题命名的..so,它在那里,但我只是想知道如何正确绑定它..
      【解决方案3】:

      这就是你在 flex 中访问命名空间 XML 的方式

      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
      

      【讨论】:

      • 从 dataprovider xml 中删除命名空间后是否可以正常工作?
      • 是的,当我删除命名空间时它工作得很好。这就是为什么我知道命名空间是它的原因。我尝试了关键字 use namespace degroNs 但现在它不起作用。
      • 只需检查我的代码示例。无法编辑此答案。因此将其作为单独的答案发布。如果有帮助,请告诉我。
      • @henry - 你说当你“删除命名空间”时它工作得很好。您是从 XML 文件中删除命名空间,还是从您的操作脚本代码中删除命名空间?
      • 从 XML 文件中删除命名空间。
      【解决方案4】:

      这对我有用。检查一下,如果有帮助,请告诉我

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

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 2014-05-26
        • 1970-01-01
        • 2012-10-10
        • 2021-05-03
        • 2014-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多