0

着信xml通信から値を取得するためにしばらくの間正常に機能しているJavaScriptコードのセクションがありましたが、特定のタグによる検出された要素の報告が突然停止しました。調べてみたところ、数字のタグだけが影響を受けるようです。文字に戻すと、すべてがうまく機能します。数字だけが使えない理由はありますか?

Javascriptコード:

xmlhttp.onreadystatechange=function()
{
    xmlDoc=xmlhttp.responseXML;
    x=xmlDoc.getElementsByTaName("VAR");
    alert(x.length); // <- reports 0 when numbers are used as tags
    var dataBack = [];
    for (j=0;j<x.length;j++) {
        dataBack[j] = x[0].getElementsByTagName(x[j])[0].childNodes[0].nodeValue);
    }
    useXMLdata(dataBack);
 }

番号タグに1文字追加してみましたが、魔法のように機能し始めました。これを使って実際にタグをキャッチしていますが、なぜ数字だけが使えないのか気になります。

4

1 に答える 1

3

数字のみの要素(例<8>Some content</8>)は、有効なXMLではないようです。

XML仕様はかなり厄介ですが、セクション3.1では開始タグの命名を定義しています。開始タグ名は、文字で始まり、NameStartChar任意の数のNameChar文字で続く必要があります。

NameStartCharサブセットであるように見えますが、NameChar特に0〜9の数字は含まれていません。したがって、有効なタグ名を数字で始めることはできません。

XMLに。などのXML要素が含まれているかどうかが検証されるとは思えません<8>Something</8>。それがJavaScriptが失敗する理由であるかどうかはわかりませんが、XMLをそのように構造化しないのは十分な理由です。

編集

次のXMLをバリデーターに接続してみてください。

<?xml version="1.0" ?> 
<Root>
  <Child>
    <1xyz>Content</1xyz>
  </Child>
</Root>

これにより、タグの要素名が無効であるというエラーが発生します。<1xyz>SOでさえそれが気に入らないので、構文の強調表示がありません!

于 2012-04-18T22:40:54.213 に答える