E4X:解析具有命名空间节点和要评估的变量的文档?

时间:2009-10-10 09:10:44

标签: flex actionscript-3 e4x

我正在尝试使用看起来像这样的节点来解析文档:

<doc>
<results>
        <result xmlns="http://www.inktomi.com/">
            <title>Senate Panel to Review Election Unit Sale</title>
        </result>
</result>
</doc>

但是结果的名称空间和节点名称可能不同。如果不是这样,那就行了:

results..*::title //>Senate Panel to ...

但这样做不会:

var myvar = "title"
results..*::[myvar] 

任何线索?

3 个答案:

答案 0 :(得分:1)

所以正确的解决方案显然是:

var myvar = "title"
var ans = results..*.(localName()==myvar);

感谢@xtyler在Twitter上寻找答案

答案 1 :(得分:0)

显然,访问子节点的方括号方式和使用*来选择任何命名空间不起作用

var doc:XML = 
<doc> 
    <results> 
        <result xmlns="http://www.inktomi.com/">  
            <title>Senate Panel to Review Election Unit Sale</title> 
        </result>
    </results>
</doc>;
var ns:Namespace = new Namespace("http://www.inktomi.com/");
trace(doc..*::title.toXMLString()); //These three 
trace(doc.results.*::result);       //lines compile
trace(doc.results.ns::["result"]);  //and run as expected
//This commented out line compiles but throws 2 verify errors in the run time
//trace(doc.results.*::["result"]); 
  

VerifyError:错误#1080:名称空间的值非法。
  ReferenceError:错误#1065:未定义变量测试。

VerifyError类表示遇到格式错误或损坏的SWF文件时发生的错误。

答案 2 :(得分:0)

不是E4X解决方案,但您可以遍历xml.namespaceDeclarations()返回的所有可用命名空间,然后获取第一个子节点或使用方括号来访问它。

您也可以预先解析xml并使所有命名空间与快速修复相同。