繁体   English   中英

使用整数名称访问XML节点

[英]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());
  1. 让所有孩子
  2. 搜索您需要的name()。

根据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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM