0

对于我的应用程序,我发出一个 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。

4

4 回答 4

3

在 XMLList 上使用 E4X 搜索表达式。

trace(xml.children().(name() == "2").toXMLString());
  1. 让所有孩子
  2. 搜索您需要的名称()。
于 2012-05-01T13:50:54.257 回答
2

从 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>标签没有有效的名称。你不应该对它没有按预期工作感到惊讶。

编辑

如果没有办法绕过这样的无效文档,我可能会在处理结果之前使用正则表达式将无效标签替换为有效标签:

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];
    } ) );
}
于 2012-05-01T13:47:52.150 回答
1

我认为 actionscript 正在“帮助”你。.child 的参数是一个对象,我敢打赌 actionscript 会看到一个数字并将其转换并将其用作索引。如果是我,我会修复 XML。以后会困扰你的。

于 2012-05-01T13:47:31.527 回答
0

If you want a short-term fix, change your non-XML with its non-standard tags to standard XML with proper named tags. Then you'll be able to use standard XML tools to manipulate it, and you'll get your code working far faster as a result.

于 2012-05-01T16:32:24.663 回答