【问题标题】:Loading XML into Flex AS3将 XML 加载到 Flex AS3
【发布时间】:2012-05-12 17:16:54
【问题描述】:

我正在尝试能够从 XML 文档中加载所有 XML 数据,并且即使进行研究也整晚都失败了

这是我尝试加载的 XML 的 sn-p:

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <id>urn:uuid:5762c9e8-4e65-3b0c-83b3-7874683f3dbe</id>
  <link href="/v1/espi_third_party_batch_feed" rel="self">
  </link>
  <title type="text">Opower ESPI Third Party Batch Feed v1</title>
  <updated>2012-04-03T22:55:36.364Z</updated>

  <entry>
    <id>urn:uuid:baa6a50a-1306-3680-80a4-51d228db8f25</id>
    <link href="/v1/User/3560606/UsagePoint/6403112/MeterReading/1/IntervalBlock/1" rel="self">
    </link>
    <content type="xml">
      <IntervalBlock xmlns="http://naesb.org/espi">
        <interval>
          <duration>3600</duration>
          <start>1299128400</start>
        </interval>
        <IntervalReading>
          <timePeriod>
            <duration>3600</duration>
            <start>1299128400</start>
          </timePeriod>
          <value>436</value>
        </IntervalReading>
      </IntervalBlock>
    </content>
  </entry>
</feed>

这是我在 XmlLoader 中困惑的 AS3 代码的 sn-p:

    public function returnArray():Array
    {           
        var ATOM:Namespace = new Namespace("http://www.w3.org/2005/Atom");
        var NAESB:Namespace = new Namespace("http://naesb.org/espi");
        trace("entered returnArray");
        var tempArray:Array = new Array();
        var x:Number = 0;
        var y:Number = 0;
        var entries = this.docXML.ATOM::entry;
        trace(entries.length());                //returns 4 and supposed to
        trace(entries[3].content.length());     //returns 0 supposed to return 1
        trace(this.docXML.ATOM::entry[3].content.NAESB::interval.length()); //returns 0`enter code here`

【问题讨论】:

  • 很抱歉您未能完成这项任务。你能告诉我们你为什么/如何失败吗?问题是什么?您是否收到运行时错误?或者是其他东西?我是否错过了您共享加载 XML 的代码的部分?
  • 没有错误,它只是不允许我访问标签 IntervalBlock 中的嵌套 xmlns,以便我可以读取嵌套在该标签内的时间/能源使用情况,因为我正在尝试为any1 可以使用的应用程序我不能只删除 xmlns 标签,因为这些数据是由美国各地的能源公司以标准格式提供的
  • 您的主题行声称问题在于加载数据;但听起来您的问题是在加载数据后访问数据。那是对的吗?您说“它不允许您访问嵌套的 xmlns?什么不是?您的 XML 没有任何特殊的命名空间项;但看起来您正在尝试访问它们,就好像它们在命名空间中一样。跨度>
  • 它允许我查看它就是它;如果我做一个跟踪(this.docXML.ATOM::entry); if 将解析所有内容,但无法访问事件之外的任何标签,即使 flex 愿意在 XML 中查看它。

标签: xml actionscript-3 apache-flex loader


【解决方案1】:

首先,您应该看看the documentation for e4x。其次:你到底想做什么?

您可以将最后一行更改为this.docXML.ATOM::entry.content..NAESB::interval.length(),但我不确定您真正想从 xml 文档中得到什么。获取节点的长度对于从 xml 文件中获取实际数据并不是很有用。

【讨论】:

  • 我正在尝试实际访问 entry 标签内的数据;使用命名空间类,我能够访问入口类,但似乎无法让命名空间类让我访问入口类中的任何内容......但如果我要跟踪(条目 [3]);它读取整个 xml 文档。我的问题是,由于这些数据是由电气公司提供的信息,如果我希望其他人使用我的应用程序,我无法更改他们的数据,所以我试图访问间隔标签以使用其中的数据,但因为它嵌套在另一个xmlns 我似乎无法访问
  • 我感觉它必须处理 id urn:uuid 这使它独一无二
【解决方案2】:

感谢 frankhermes 和 www.Flextras.com 帮助我学习的答案是为了继续遍历需要在 xml 中添加另一个 ATOM 命名空间来继续遍历

var entries = this.docXML.ATOM::entry;
trace(entries[3].content.length()); 

应该是

var entries = this.docXML.ATOM::entry;
trace(entries[3].ATOM::content.length()); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2010-11-15
    • 2014-01-29
    相关资源
    最近更新 更多