我正在尝试使用看起来像这样的节点来解析文档:
<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]
任何线索?
答案 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并使所有命名空间与快速修复相同。