DOMParser.parseFromString(text,"text/html") интерпретирует только первые ~21 500 байт. Это ошибка?

У меня Win 7, 64-битная, Firefox 32.0.1, Noscript работает.

Следующий код возвращает только 199 узлов с aXML.getElementsByTagName("node"), тогда как в разобранном тексте их 300, что не является правильно сформированным xml.

var atext = '';
for (var i=0;i<300;i++) {
    atext += '  <node id="'+i+'" lat="42.5168939" lon="1.553855" version="2" changeset="21730124"/>'+"\n\r";
}
parser = new DOMParser();
aXML= parser.parseFromString(atext , "text/html");
console.log(" nodes: " + aXML.getElementsByTagName("node").length
        +"\n\r atext.length:" + atext.length);
console.log(aXML.getElementsByTagName('node'));

Консоль показывает:

" nodes: 199

 atext.length:25390"
HTMLCollection [ <node#0>, <node#1>, <node#2>, <node#3>, <node#4>, <node#5>, <node#6>, <node#7>, <node#8>, <node#9>, 189 weitere… ]

Может ли это быть ошибкой?

Веб-консоль не показывает ошибок от parseFromString.

(В последнее время я получаю журнал других ошибок, которые я не могу связать с открытыми вкладками.

A promise chain failed to handle a rejection.
Date: Sat Mar 14 2015 22:01:10 GMT+0100
Full Message: null

Может ли это быть связано?)

1 ответ

Проблема в том, что вы пытаетесь проанализировать XML как HTML. Два совершенно разные с точки зрения допустимого синтаксиса. Вместо того, чтобы использовать:

aXML= parser.parseFromString(atext , "text/html");

Вы должны вместо этого использовать:

aXML= parser.parseFromString(atext , "text/xml");

Кроме того, убедитесь, что XML действителен, иначе он не будет проанализирован. В вашем примере это не так, но я предполагаю, что это всего лишь контрольный пример.

Другие вопросы по тегам