[英]Access XML nodes with integer names
对于我的应用程序,我创建一个HTTPRequest,并从JSP获取一些XML。 该XML有一些(是的,我知道这是无效/不正确的XML。如果找不到可取的内容,我会尝试在内部寻址)以整数作为名称的节点,例如说<2>
。
当我尝试使用myXMLVariable.child("2")
访问它时,它将返回第三个(index = 2)XML节点。 我了解此行为是“正确的” 。 有什么办法可以解决此问题?
var myXML:String = "<response>" +
"<place1>" +
" <item>1</item>" +
" <stuff>1</stuff>" +
"</place1>" +
"<2>" +
" <item>1</item>" +
" <stuff>1</stuff>" +
"</2>" +
"<place3>" +
" <item>1</item>" +
" <stuff>1</stuff>" +
"</place3>" +
"</response>";
protected function getParam():void
{
var xml:XML = new XML(myXML);
Alert.show(xml.child("2"));
//trace(xml.child("2"))
}
xml.child("2")
返回
<place3>
...
</place3>
...当我想要
<2>
...
</2>
我知道这是无效的XML。 我正在寻找一种解决方法,一个短期解决方案。 发行日期即将到来,此解决方法将被删除,并使用适用于下一个版本的XML代替。
在XMLList上使用E4X搜索表达式。
trace(xml.children().(name() == "2").toXMLString());
根据XML规范:
[Definition: A Name is an Nmtoken with a restricted set of initial characters.]
Disallowed initial characters for Names include digits, diacritics, the full stop and the hyphen.
您的<2>
标记没有有效的名称。 您应该不会感到惊讶,它没有按预期工作。
编辑
如果无法解决这样的无效文档,在处理结果之前,我可能会使用RegExp将无效标签替换为有效标签:
public function replaceNumericalXMLTagNames( input:String ):String {
var reg:RegExp = /(\<\/?)([0-9]+)(\>)/g;
return input.replace( reg, function():String {
return arguments[1]+"num"+arguments[2]+arguments[3];
} ) );
}
我认为动作脚本正在“帮助”您。 .child的参数是一个对象,我敢打赌,动作脚本会看到一个数字并将其转换并将其用作索引。 如果是我,我将修复XML。 以后会困扰你的。
如果要进行短期修复,请将具有非标准标记的非XML更改为具有适当命名标记的标准XML。 然后,您将能够使用标准XML工具对其进行操作,从而使您的代码运行得更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.