Hello,当我尝试使用AS3解析XML时,我的输出面板中出现错误和输出“undefined”。我想得到score1,score2的值.... 谁能告诉我我做错了什么?
感谢
科学
////AS3//////////
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
var myXML:XML;
var xmlLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
xmlLoader.load(new URLRequest("scores.xml"));
function xmlLoaded(e:Event):void
{
myXML = new XML(e.target.data);
trace(myXML.scores1);
}
//////xml file////////////
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<root>
<scores>
<id>1</id>
<score1>105</score1>
<score2>60</score2>
<score3>56</score3>
<score4>48</score4>
<score5>30</score5>
</scores>
</root>
</feed>
答案 0 :(得分:3)
您可能会发现descendant accessor ..很有用。例如:
myXML..score1[0].toString()
修改强>
使用通用命名空间会导致一些问题。添加别名可以修复它,例如:
<feed xmlns:atom="http://www.w3.org/2005/Atom">
否则Flash期望您将使用完全限定名称来指定您尝试访问的元素:
var qName:QName = new QName("http://www.w3.org/2005/Atom","score1");
trace(myXML.descendants(qName)[0].toString()); // 105
答案 1 :(得分:2)
由于您的xml中没有“scores1”标记,因此未定义。 试试这个:
trace(myXML.scores.id.toString());
trace(myXML.scores.score1.toString());
trace(myXML.scores.score2.toString());
trace(myXML.scores.score3.toString());
trace(myXML.scores.score4.toString());
trace(myXML.scores.score5.toString());
答案 2 :(得分:0)
我有一个更深入的帖子here,但你基本上会抓住所有得分标签,然后总结它们。您还必须考虑在Feed节点上定义的xmlns。
以下代码适用于score1到scoreX:
var namespace:Namespace = new Namespace("http://www.w3.org/2005/Atom");
var score:XML;
var scores:XMLList = xml..namespace::scores.*.(/^http:\/\/www.w3.org\/2005\/Atom::score/.test(name()));
if(!scores)
{
return;
}
var final:Number = 0;
for each(score in scores)
{
final += Number(score.text());
}
trace(final); // 299
您可以通过引用命名空间变量来简化正则表达式。
祝你好运!
<强> [[编辑]] 强>
修改为引用命名空间:
var regex:RegExp = new RegExp(namespace.toString().replace(/\//g, "\\/") + "::score");
var scores:XMLList = xml..namespace::scores.*.(regex.test(name()));
答案 3 :(得分:0)
试试这段代码:
import gs.dataTransfer.XMLParser;
XMLParser.load("myDocument.xml", onFinish);
function onFinish($success:Boolean, $results:Object, $xml:XML):Void
{ //This function gets called when the XML gets parsed.
if ($success) {
trace("The first book is: "+$results.Book[0].name);
}
}
答案 4 :(得分:-1)
它更好......就像这样
在分割位置使用score,id,score1 xml标签
var xml=Xml as String;
trace(xml);
var xmlfull=xml.split("scores").length - 1;
trace(xmlfull);
for (var i = 1; i <= xmlfull; i++)
{
trace(xml.split("id")[i].split("id")[0]);
trace(xml.split("score1")[i].split("score1")[0]);
trace(xml.split("score2")[i].split("score2")[0]);
}