javascript xml getElementsByTagName其中tag是一个数字

时间:2012-04-18 21:32:41

标签: javascript xml

我已经有一段我的JavaScript代码已经工作了一段时间,现在可以从传入的xml通信中获取值,但它突然停止通过某些标记报告任何找到的元素。我做了一些看,似乎只有数字的标签受此影响,一旦我切换回字母,一切都很好。我有什么理由不能使用数字吗?

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 个答案:

答案 0 :(得分:3)

仅作为数字的元素(例如<8>Some content</8>)似乎不是有效的XML。

XML specification非常糟糕,但section 3.1定义了开始标记命名。开始标记名称必须以NameStartChar字符开头,然后继续使用任意数量的NameChar个字符。

NameStartChar似乎是NameChar的子集,其中不包括数字0-9。因此,有效的标签名称不能以数字开头。

我怀疑你的XML是否会验证它是否包含<8>Something</8>等XML元素。这是否是你的JavaScript失败的原因我不知道,但它的理由是不以这种方式构建你的XML。

修改

尝试将以下XML插入validator

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

这会为<1xyz>标记提供错误无效的元素名称。即使是SO也不喜欢它因此缺乏语法高亮!