一、Java 生成 XML 的两种方式
Java 可以通过两种方式来生成 XML:DOM 方式和 SAX 方式。DOM 方式使用内存模型来存储 XML 文件,而 SAX 方式则使用事件驱动模式来解析 XML 文件。
- DOM 方式
在 DOM 方式下,Java 代码会把整个 XML 文件加载到内存中,在内存模型中修改和操作节点。可以使用标准的 Java DOM API 来创建、修改和保存 XML 文件,具体步骤如下:
1.1 创建 Document 对象
Document 对象是 DOM API 中的核心对象,可以用它来创建 XML 文档的根元素,可以使用 DocumentBuilderFactory 类来创建 Document 对象。代码如下:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
1.2 创建元素节点
创建元素节点可以使用 Document 对象的 createElement() 方法,代码如下:
Element root = document.createElement("root");
1.3 创建属性节点
创建属性节点可以使用 Element 对象的 setAttribute() 方法,代码如下:
root.setAttribute("id", "1");
1.4 添加子节点
添加子节点可以使用 Element 对象的 appendChild() 方法,代码如下:
Element child = document.createElement("child");
root.appendChild(child);
1.5 转换为字符串
可以使用 Transformer API 来将 Document 对象转换成字符串。这里使用 DOMSource 和 StreamResult 作为输入和输出流,代码如下:
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);
String xmlString = writer.toString();
- SAX 方式
在 SAX 方式下,Java 代码会逐行读取 XML 文件,当遇到开始标签、结束标签、元素值等事件时触发相应的处理方法。可以使用标准的 Java SAX API 来解析和处理 XML 文件,具体步骤如下:
2.1 设置解析器
可以使用 SAXParserFactory 类来创建 SAXParser 对象,代码如下:
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
2.2 实现处理方法
要实现处理方法,需要继承 DefaultHandler 类,重写 startElement() 方法。代码如下:
class MyHandler extends DefaultHandler {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// 处理开始标签
}
}
2.3 解析 XML 文件
可以使用 SAXParser 对象来解析 XML 文件,代码如下:
InputStream inputStream = new FileInputStream("example.xml");
parser.parse(inputStream, new MyHandler());
二、示例说明
下面是两个使用 DOM 方式生成 XML 的示例:
- 生成一个简单的 XML 文档:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("root");
Element child = document.createElement("child");
child.setTextContent("Hello World!");
root.appendChild(child);
document.appendChild(root);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);
String xmlString = writer.toString();
System.out.println(xmlString);
运行结果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root><child>Hello World!</child></root>
- 生成一个带有属性的 XML 文档:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("root");
root.setAttribute("id", "1");
Element child1 = document.createElement("child");
child1.setTextContent("Hello World!");
root.appendChild(child1);
Element child2 = document.createElement("child");
child2.setTextContent("Goodbye World!");
root.appendChild(child2);
document.appendChild(root);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);
String xmlString = writer.toString();
System.out.println(xmlString);
运行结果:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root id="1"><child>Hello World!</child><child>Goodbye World!</child></root>
以上是 Java 生成 XML 并转为字符串的方法的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 生成xml并转为字符串的方法 - Python技术站