gpt4 book ai didi

javascript - 如何强制浏览器停止解析动态插入的代码到 HTML 4?

转载 作者:行者123 更新时间:2023-11-28 03:31:02 26 4
gpt4 key购买 nike

我实际上需要将一些非常古老的 HTML 解析为 PDF 文件,我已经有一个 jar 可以执行此操作,但它只接受合法的 XHTML 代码。所以我必须解析我的旧 HTML 代码,这样 jar 才会接受它。我很清楚我解析的 HTML 代码看起来像我的想法是使用 HTML-Parser by John Resig将某些标签(img、br、meta)解析为直接 XML,这将对它们产生所需的效果(主要是结束标签)。

我的实际尝试是这样的:

function fixTags() {
var tagsToParse = new Array( "br", "img", "input", "meta" );

for(i = 0; i < tagsToParse.length; i++) {
var elements = document.getElementsByTagName(tagsToParse[i]);
for(j = 0; j < elements.length; j++) {
elements[j].outerHTML = HTMLtoXML(elements[j].outerHTML);
}
}
}

这里的问题是浏览器会将元素的新代码解释为 HTML4,这导致他改回我想更改的内容。例如 <br>变成 <br/>在通过解析器之后,但浏览器实际上会将其解释为 HTML4,并且该元素的 outerHTML 属性将为 <br>再次。

我解决这个问题的第一个尝试是暂时强制文档为 XHTML:

var root = document.getElementsByTagName("html")[0];
root.setAttribute("xml", "http://www.w3.org/1999/xhtml");

但这似乎根本不会影响浏览器的行为。

从 dom 构建字符串树、替换那里的字符串并将树遍历到我想要的字符串的“明显”解决方案对于这个“小”问题来说似乎有点过于繁重和复杂,这就是我问的原因你。

因此,如果有人有更简单的解决方案的想法,我将非常高兴,该应用程序仅适用于 IE,因此也接受 IE 独有的解决方案。

最佳答案

对于您的用例,使用现有的 HTML -> XHTML 转换器可能最简单,例如:http://www.it.uc3m.es/jaf/html2xhtml/simple-form.html

如果您真的想在浏览器中执行此操作,对于简单的解决方案,您可以尝试这样的方法,使用简单的正则表达式(您通常不应该使用 RegExp 来解析 XML)和 XMLSerializer。

var serializer = new XMLSerializer();
var xml = serializer.serializeToString(document).replace(/<(img|meta|input|br|link)([^>]*)/gi, function (ignore, tagName, attributes) {
return '<' + tagName + attributes + ' />';
});

如果这不起作用,您可以查找不那么简单的正则表达式,但我认为对于可以首先转换为 PDF 的文档应该可以解决问题。

编辑:请注意,RegEx 假定这些标签都不会在此操作之前自动关闭。

关于javascript - 如何强制浏览器停止解析动态插入的代码到 HTML 4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17858925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com