Java 将DOM作为XML文件写入

Java 将DOM作为XML文件写入,java,xml,dom,xml-parsing,saxon,Java,Xml,Dom,Xml Parsing,Saxon,直接阅读手册: 将DOM作为XML文件写入 构造DOM后(通过解析XML文件或 (以编程方式构建)您经常希望将其保存为XML。 本节将向您展示如何使用Xalan转换来实现这一点 包裹 使用该包,您将创建一个transformer对象来连接 将DOMSource转换为StreamResult。然后,您将调用转换器的 方法将DOM作为XML数据写出 我的输出: thufir@dur:~/NetBeansProjects/helloWorldSaxon$ thufir@dur:~/NetBeansP

直接阅读手册:

将DOM作为XML文件写入

构造DOM后(通过解析XML文件或 (以编程方式构建)您经常希望将其保存为XML。 本节将向您展示如何使用Xalan转换来实现这一点 包裹

使用该包,您将创建一个transformer对象来连接 将DOMSource转换为StreamResult。然后,您将调用转换器的 方法将DOM作为XML数据写出

我的输出:

thufir@dur:~/NetBeansProjects/helloWorldSaxon$ 
thufir@dur:~/NetBeansProjects/helloWorldSaxon$ gradle clean run

> Task :run
Jan 04, 2019 3:28:24 PM helloWorldSaxon.HandlerForXML createDocumentFromURL
INFO: http://books.toscrape.com/
Jan 04, 2019 3:28:26 PM helloWorldSaxon.HandlerForXML createDocumentFromURL
INFO: javax.xml.transform.dom.DOMResult@3cda1055
Jan 04, 2019 3:28:26 PM helloWorldSaxon.HandlerForXML createDocumentFromURL
INFO: html

BUILD SUCCESSFUL in 2s
4 actionable tasks: 4 executed
thufir@dur:~/NetBeansProjects/helloWorldSaxon$ 
首先,对于
domResult
是什么、看起来像什么或包含什么,我希望输出更有意义。我认为,更重要的是迭代或遍历下面的
文档

    public void createDocumentFromURL() throws SAXException, IOException, TransformerException, ParserConfigurationException {
        LOG.info(url.toString());

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        XMLReader xmlReader = XMLReaderFactory.createXMLReader("org.ccil.cowan.tagsoup.Parser");
        Source source = new SAXSource(xmlReader, new InputSource(url.toString()));

        DOMResult domResult = new DOMResult();

        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(source, domResult);  //how do I find the result of this operation?

        LOG.info(domResult.toString());  //traverse or iterate how?

        DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
//        Document document = documentBuilder.parse();   ///bzzzt, wrong

        Document document = (Document) domResult.getNode();

        LOG.info(document.getDocumentElement().getTagName());
        }
输出为“html”使我倾向于相信这就是
html
。所需的输出是
html
,但来自
文档
,而不是
字符串

Oracle Documentation在写出一个
DOM
时就是解析文档。此文档是否尚未解析?或者,换句话说,我如何确定它到底是还是不是一个
XML
文件

那么….再次变换它

另见:


您实际上只需将DOM转换为您的文件

范例

//创建DOM
Document Document=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
元素根=document.createElement(“根”);
document.appendChild(根);
元素foo=document.createElement(“foo”);
appendChild(document.createTextNode(“Bar”));
根追加子对象(foo);
您可以将该DOM保存到如下文件:

//将DOM作为XML写入文件
File xmlFile=新文件(“/path/to/File.xml”);
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transform(新的DOMSource(文档)、新的StreamResult(xmlFile));
您也可以这样打印DOM:

//将DOM打印为XML
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transform(新的DOMSource(文档),新的StreamResult(System.out));
输出

如果要格式化XML,请执行以下操作:

//将DOM打印为格式化的XML
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT,“是”);
transform(新的DOMSource(文档),新的StreamResult(System.out));
输出


酒吧

您实际上只需将DOM转换为文件

范例

//创建DOM
Document Document=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
元素根=document.createElement(“根”);
document.appendChild(根);
元素foo=document.createElement(“foo”);
appendChild(document.createTextNode(“Bar”));
根追加子对象(foo);
您可以将该DOM保存到如下文件:

//将DOM作为XML写入文件
File xmlFile=新文件(“/path/to/File.xml”);
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transform(新的DOMSource(文档)、新的StreamResult(xmlFile));
您也可以这样打印DOM:

//将DOM打印为XML
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transform(新的DOMSource(文档),新的StreamResult(System.out));
输出

如果要格式化XML,请执行以下操作:

//将DOM打印为格式化的XML
Transformer Transformer=TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT,“是”);
transform(新的DOMSource(文档),新的StreamResult(System.out));
输出


酒吧