我试过可能的例子,我在这里找到了新的(谷歌)。 似乎没什么用。
我有一个XML文件,我在调用网站后得到了这个文件:
<?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对象中:
var xml:XML = new XML(event.target.data);
到目前为止,该对象包含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>
现在我需要读取会话下的键值,所以我尝试过:
xml.Session.Key
xml.Session[0].Key
xml[0].Session.Key
其中一些返回一个空字符串,有些只是错误,无论是没有数据?
所以在Expression窗口中我输入xml [0] [0]只是为了看看会发生什么。
并返回键值,但是当我将其放入我的代码
时var key:String = xml[0][0];
trace(key):
跟踪返回整个XML文件? 所以我不确定我可能缺少什么?
答案 0 :(得分:3)
问题在于命名空间。
试试这个:
var xml:XML = new XML(event.target.data);
var ns:Namespace = xml.namespace();
trace(xml.ns::Session.ns::Key);
另外,这可能是一个坏主意,但是当我只想要一些数据并且不关心命名空间(或者它们与我正在做的事情无关)时,我有这个方便的功能去除它们并返回没有它们的XML对象:
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, ""));
}
答案 1 :(得分:0)
由于你的xml有一个命名空间,你需要告诉Flash / e4x使用它:
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
}