0

私のアプリケーションでは、HTTPRequest を作成し、JSP から提供された XML を取得します。その XML にはいくつかのノードがあります (はい、これは無効/不適切な XML であることは承知しています。応急処置が見つからない場合は、内部で対処しようとします)<2>たとえば、名前として整数を持つノードがあります。

を使用してアクセスしようとすると、myXMLVariable.child("2")代わりに 3 番目 (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. 必要な name() を検索します。
于 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>ん。期待どおりに動作しないことに驚かないでください。

編集

このような無効なドキュメントを回避する方法がない場合は、結果を処理する前に、おそらく 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];
    } ) );
}
于 2012-05-01T13:47:52.150 に答える
1

actionscript はあなたを「助けている」と思います。.child のパラメーターはオブジェクトであり、actionscript が数値を見て変換し、それをインデックスとして使用することは間違いありません。私だったら、XML を修正します。それは後であなたを悩ませるでしょう。

于 2012-05-01T13:47:31.527 に答える
0

短期的な修正が必要な場合は、非標準タグを使用する非XMLを、適切な名前付きタグを使用する標準XMLに変更します。そうすれば、標準のXMLツールを使用して操作できるようになり、その結果、コードがはるかに高速に動作するようになります。

于 2012-05-01T16:32:24.663 に答える