javaはDocumentオブジェクトを出力できない場合の解決方法
JavaでDocumentオブジェクトを直接出力することはできません。DocumentオブジェクトはXML文書のルートノードを表しており、それ自体には出力可能な内容は含まれていないためです。
ドキュメントオブジェクトの内容をコンソールやファイルに出力したい場合は、Transformerクラスを使用してドキュメントオブジェクトを文字列やファイルに変換できます。
ドキュメント オブジェクトを文字列に変換し、それにコンソールに出力する方法を示すサンプル コードを以下に示します。
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
public class Main {
public static void main(String[] args) {
try {
// 创建一个DocumentBuilder对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
// 创建一个Document对象
org.w3c.dom.Document document = builder.newDocument();
// 创建根节点
org.w3c.dom.Element rootElement = document.createElement("root");
document.appendChild(rootElement);
// 创建子节点
org.w3c.dom.Element childElement = document.createElement("child");
childElement.setTextContent("Hello, World!");
rootElement.appendChild(childElement);
// 创建Transformer对象
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // 设置输出格式化
// 将Document对象转换为字符串
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
このコードを実行すると、以下の出力が表示されます。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<child>Hello, World!</child>
</root>
先のサンプルコードで分かる通り、Documentオブジェクトの中身は文字列に変換されて、コンソールにちゃんと出力できました。ファイルに出力したい場合は、StreamResultコンストラクタの引数を指定したファイルのパスに変えればよいです。