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 действителен, иначе он не будет проанализирован. В вашем примере это не так, но я предполагаю, что это всего лишь контрольный пример.