- Java XML 教程
- Java XML 首页
- Java XML 概述
- Java XML 解析器
- Java DOM 解析器
- Java DOM 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java SAX 解析器
- Java SAX 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- JDOM XML 解析器
- JDOM XML 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java StAX 解析器
- Java StAX 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java XPath 解析器
- Java XPath 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java DOM4J 解析器
- Java DOM4J 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java XML 有用资源
- Java XML - 问题与解答
- Java XML - 快速指南
- Java XML - 有用资源
- Java XML - 讨论
Java DOM 解析器 - 创建 XML 文档
Java DOM 解析器 API 包含创建 XML 文档的方法、接口和类。使用此 API,我们可以通过 Java 应用程序从头开始创建 XML 文档。`createElement()` 方法创建新元素,`appendChild()` 方法将创建的元素附加到已存在的元素。
使用 Java DOM 解析器创建 XML
我们可以通过以下步骤使用 Java 中的 DOM 解析器创建 XML 文档:
- 步骤 1:创建 DocumentBuilder 对象
- 步骤 2:创建一个新的 Document
- 步骤 3:创建根元素
- 步骤 4:将元素附加到根元素
- 步骤 5:将内容写入 XML 文件
- 步骤 6:使用控制台测试输出
步骤 1 请参考此页面。
步骤 2:创建一个新的 Document
使用上面步骤中创建的 DocumentBuilder 对象,使用 `newDocument()` 函数创建一个新的文档。
Document doc = dBuilder.newDocument();
步骤 3:创建根元素
每个 XML 文档都应该拥有一个根元素,也称为父元素。我们可以使用 `createElement()` 方法创建根元素,并将其附加到上一步中创建的文档。
Element rootElement = doc.createElement("root");
doc.appendChild(rootElement);
步骤 4:将元素附加到根元素
在根元素内,我们可以创建任意数量的子元素,并以与将根元素附加到文档相同的方式附加它们。要在元素内写入文本内容,可以使用 `createTextNode()` 方法。我们还可以使用 `createAttribute()` 方法为元素创建属性。
Element child = doc.createElement("child");
rootElement.appendChild(child);
child.appendChild(doc.createTextNode("text_content_here"));
Attr attr = doc.createAttribute("child");
步骤 5:将内容写入 XML 文件
在使用相应的属性构建文档中的元素之后,我们需要通过创建 Transformer 对象将此内容写入 XML 文件,该对象将我们的源文档转换为 StreamResult 并将其存储在指定的文件路径中,并使用给定的名称。
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("filepath:\\new.xml"));
transformer.transform(source, result);
步骤 6:使用控制台测试输出
我们可以通过在控制台上打印来测试我们的 XML 文件。这是一个可选步骤。
StreamResult consoleResult = new StreamResult(System.out); transformer.transform(source, consoleResult);
创建基本的 XML 文件
要创建文档元素,我们使用方法`createElement("element_name")`。此方法将元素名称作为参数,并返回一个新的 Element 对象。
获得新的 Element 对象后,我们可以使用`appendChild(Element)`方法将此 Element 对象附加到文档。此方法还用于将元素附加到另一个元素(创建子元素)。
cars.xml
我们想要在 D 盘创建名为“cars.xml”的以下 xml 文件。
<cars> <supercars>Ferrari</supercars> </cars>
CreateXMLDemo.java
在下面的代码中,我们创建了一个名为“cars”的根元素,并附加了一个名为“supercars”的子元素。我们还向 supercars 元素添加了文本内容。
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.File;
public class CreateXMLDemo {
public static void main(String argv[]) {
try {
//Creating a DocumentBuilder Object
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
//Create a new Document
Document doc = dBuilder.newDocument();
//Creating the root element
Element rootElement = doc.createElement("cars");
doc.appendChild(rootElement);
//Appending elements to the root element
Element supercar = doc.createElement("supercars");
rootElement.appendChild(supercar);
supercar.appendChild(doc.createTextNode("Ferrari"));
//writing the content into XML file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("D:\\cars.xml"));
transformer.transform(source, result);
//Output to console for testing
StreamResult consoleResult = new StreamResult(System.out);
transformer.transform(source, consoleResult);
} catch (Exception e) {e.printStackTrace();}
}
}
输出
为了测试,我们在控制台上打印了文档输出。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><cars><supercars>Ferrari</supercars></cars>
创建带有属性的 XML 文件
可以使用方法`createAttribute("Attribute_name")`为元素创建属性。此 Document 接口方法将属性的名称作为参数,并返回`Attr`对象。`setValue("value")`方法用于设置属性的值。
现在,要将此属性节点设置为 Element,我们使用`setAttributeNode(Attr)`方法以及我们需要设置此属性的 Element 对象。
newcars.xml
我们需要在 D 盘创建以下“newcars.xml”。
<cars> <supercars company="Ferrari"> <carname type="formula one">Ferrari 101</carname> <carname type="sports">Ferrari 202</carname> </supercars> </cars>
CreateXMLAttributeDemo.java
我们为 supercars 元素创建了两个 carname 元素。此外,使用 `setAttributeNode()` 方法,我们为每个 carname 元素添加了两个属性。
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import java.io.File;
public class CreateXMLAttributeDemo {
public static void main(String argv[]) {
try {
//Creating a DocumentBuilder Object
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
//Creating a new Document
Document doc = dBuilder.newDocument();
//Creating the root element
Element rootElement = doc.createElement("cars");
doc.appendChild(rootElement);
//Appending sub element to the root element
Element supercar = doc.createElement("supercars");
rootElement.appendChild(supercar);
//Setting attribute to the sub element
Attr attr = doc.createAttribute("company");
attr.setValue("Ferrari");
supercar.setAttributeNode(attr);
//Adding First child element to sub element
Element carname = doc.createElement("carname");
Attr attrType = doc.createAttribute("type");
attrType.setValue("formula one");
carname.setAttributeNode(attrType);
carname.appendChild(doc.createTextNode("Ferrari 101"));
supercar.appendChild(carname);
//Adding second child element to sub element
Element carname1 = doc.createElement("carname");
Attr attrType1 = doc.createAttribute("type");
attrType1.setValue("sports");
carname1.setAttributeNode(attrType1);
carname1.appendChild(doc.createTextNode("Ferrari 202"));
supercar.appendChild(carname1);
//writing the content into XML file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("D:\\newcars.xml"));
transformer.transform(source, result);
//Output to console for testing
StreamResult consoleResult = new StreamResult(System.out);
transformer.transform(source, consoleResult);
} catch (Exception e) { e.printStackTrace(); }
}
}
输出
为了测试,我们在控制台上打印了文档输出。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><cars><supercars company="Ferrari"><carname type="formula one">Ferrari 101</carname><carname type="sports">Ferrari 202</carname></supercars></cars>