首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionScript 3从网站解析XML

ActionScript 3从网站解析XML
EN

Stack Overflow用户
提问于 2013-02-08 06:08:33
回答 2查看 140关注 0票数 1

我已经尝试了我在这里和新的(Google)上找到的例子。似乎什么都不起作用。

我有一个XML文件,它是在调用网站后获得的:

代码语言:javascript
复制
<?xml version="1.0" encoding="iso8859-1" ?>
<Database version="1.24" xmlns="http://1234.com">
  <Session>
    <Key>1234</Key>
    <Count>2424</Count>
    <SubExp>Sun Dec  1 00:00:00 2013</SubExp>
    <GMTime>Thu Feb  7 19:38:03 2013</GMTime>
    <Remark>cpu: 0.058s</Remark>
  </Session>
</Database>

好的,我像这样加载到一个XML对象中:

代码语言:javascript
复制
var xml:XML = new XML(event.target.data);

到目前为止,该对象包含XML数据:

代码语言:javascript
复制
<Database version="1.24" xmlns="http://1234.com">
      <Session>
        <Key>1234</Key>
        <Count>2424</Count>
        <SubExp>Sun Dec  1 00:00:00 2013</SubExp>
        <GMTime>Thu Feb  7 19:38:03 2013</GMTime>
        <Remark>cpu: 0.058s</Remark>
      </Session>
    </Database>

现在我需要读取session下的键值,所以我尝试了:

代码语言:javascript
复制
xml.Session.Key
xml.Session[0].Key
xml[0].Session.Key

其中一些返回空字符串,另一些只是错误,没有数据?

所以在表达式窗口中,我输入了xml,只是想看看会发生什么。

并且它返回键值,但是当我将它放入代码中时

代码语言:javascript
复制
var key:String = xml[0][0];
trace(key):

跟踪返回整个XML文件吗?所以我不确定我可能遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-08 06:38:00

问题出在名称空间上。

试试这个:

代码语言:javascript
复制
var xml:XML = new XML(event.target.data);
var ns:Namespace = xml.namespace();
trace(xml.ns::Session.ns::Key);

而且,这可能不是一个好主意,但是当我只需要一些数据而不关心名称空间(或者它们与我正在做的事情无关)时,我有一个方便的函数可以将它们剥离出来并返回一个没有它们的XML对象:

代码语言:javascript
复制
public function stripNamespaces(xml:XML):XML {

    const DECLARATION_REG_EXP:RegExp = new RegExp("xmlns[^\"]*\"[^\"]*\"", "gi");

    var namespaceDeclarations:Array = xml.namespaceDeclarations();

    for (var i:int = 0; i < namespaceDeclarations.length; i++) {
        xml.removeNamespace(namespaceDeclarations[i]);
    }

    return new XML(xml.toString().replace(DECLARATION_REG_EXP, ""));        
}
票数 3
EN

Stack Overflow用户

发布于 2013-02-08 06:38:55

因为您的xml有一个名称空间,所以您需要告诉Flash/e4x使用它:

代码语言:javascript
复制
private var xml:XML =
    <Database version="1.24" xmlns="http://1234.com">
      <Session>
        <Key>1234</Key>
        <Count>2424</Count>
        <SubExp>Sun Dec  1 00:00:00 2013</SubExp>
        <GMTime>Thu Feb  7 19:38:03 2013</GMTime>
        <Remark>cpu: 0.058s</Remark>
      </Session>
    </Database>;

private function onCreationComplete():void
{
    namespace myNameSpace = "http://1234.com";
    use namespace myNameSpace;
    var value:String = xml.Session.Key;
    trace("value:", value); // outputs: value: 1234
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14761956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档