为了账号安全,请及时绑定邮箱和手机立即绑定

org.w3c.dom.Document 打印无效的 XML 文件

org.w3c.dom.Document 打印无效的 XML 文件

阿波罗的战车 2021-05-31 15:10:40
我有一个org.w3c.dom.Document来自 HTML的 XML org.jsoup.nodes.Document。当我序列化 时org.w3c.dom.Document,它会生成一个无效的 XML 文件:它不会关闭META标记。为什么?这是一个错误吗?从jsoup? 从爪哇org.w3c.dom?从javax.xml.transform.Transformer?相关错误:W3CDom.fromJsoup fails when xmlns is defined https://github.com/jhy/jsoup/issues/1096应该org.jsoup.nodes.Document.toString()生成一个有效的 XML 文件吗? https://github.com/jhy/jsoup/issues/1097示例代码:import org.jsoup.Jsoup;import org.jsoup.helper.W3CDom;import org.w3c.dom.Document;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import java.io.ByteArrayInputStream;import java.io.StringWriter;import java.nio.charset.StandardCharsets;public class Test130e {    public static void main(String[] args) throws Exception {        String html = "<html><head><script async src=\"http://example.com/script.js\"></script></head></html>";        org.jsoup.nodes.Document jsoupDoc = Jsoup.parse(html);         System.out.println("+++ jsoupDoc.toString()");        System.out.println(jsoupDoc.toString());        Document w3cDoc = new W3CDom().fromJsoup(jsoupDoc);        String xml = w3cDocToString(w3cDoc);        System.out.println("+++ xml");        System.out.println(xml);        // this previous xml file is invalid, and so it fails to parse it        // The element type "META" must be terminated by the matching end-tag "</META>".        Document w3cDoc2 = parseXml(xml);    }    static Document parseXml(String content) throws Exception {        DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();        return documentBuilder.parse(new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)));    }为什么会生成w3cDocToString无效的 XML 文件(它不会关闭META标记)?这是一个错误吗?从jsoup? 从爪哇org.w3c.dom?
查看完整描述

3 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

(澄清了我对评论的回答;评论不再与当前形式的答案相关)。

在 HTML 中,<meta>元素是自闭合的;没有结束标签。

您已经构建了一个 DOM 文档,它是一个节点树,其中最顶部的节点是一个 HTML 元素。

然后,您使用 JAXP 序列化程序序列化了 DOM 文档,而没有指定输出方法。默认输出方法取决于根元素,即 HTML,因此您将获得 HTML 序列化。HTML 序列化程序向输出添加一个未关闭的 META 标记。


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信