【问题标题】:DOMParser.parseFromString(text,"text/html") only interprets the first ~21,500 Bytes. Is this a bug?DOMParser.parseFromString(text,"text/html") 仅解释前约 21,500 个字节。这是一个错误吗?
【发布时间】:2015-05-17 05:05:35
【问题描述】:

我正在运行 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

这有关系吗?)

【问题讨论】:

  • 你能把它缩小到一个更小的文件来重现问题吗(小到可以包含在问题中)?
  • 没有人会阅读 25k 的 xml。继续删除文件的一些部分,直到您有一个非常小的文件出现问题
  • @FrederickCheung: 好了,我用 javascript 做了一个示例代码。
  • 用什么浏览器测试这个?
  • @Anonymous:我正在运行 Win 7、64 位、Firefox 32.0.1、Noscript。 :)

标签: javascript firefox html-parsing promise domparser


【解决方案1】:

问题是您试图将 XML 解析为 HTML。两者在有效语法方面完全不同。而不是使用:

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

您需要改为使用:

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

另外,请确保 XML 有效,否则将无法解析。在您的示例中,它不是,但我认为这只是一个测试用例。

【讨论】:

  • 不,在实际用例中它不是格式良好的 XML。
  • 为了解析它,它需要是有效的 XML 或 HTML。这个例子都不是。
  • 提示:使用text/xml 解析Web 组件时,connectedCallback 等生命周期事件将被忽略。这将影响组件的内部工作。在这种情况下使用text/html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
  • 2014-10-28
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
相关资源
最近更新 更多