我有一个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
?
慕莱坞森
相关分类