Java Xml 简明教程

Java JDOM Parser - Create XML Document

Java JDOM 解析器是 Java API,它具有用于从头开始创建 XML 文档的类和方法。我们可以创建一个新的 JDOM 文档对象,并使用文档和元素接口中提供的类添加元素和属性。在本教程中,我们将使用 setRootElement()、addContent()、setText() 和 setAttribute() 方法来详细创建 XML 文件。

Create XML using Java JDOM parser

我们可以在 Java 中使用 JDOM 解析器通过以下步骤来创建 XML 文档:

  1. 步骤 1: 创建 JDOM 文档对象

  2. 步骤 2: 创建并追加根元素

  3. 步骤 3: 创建元素和属性

  4. 步骤 4: 将元素追加到根

  5. *步骤 5:*将内容写入 XML 文件

  6. *步骤 6: *使用控制台测试输出

Step 1: Creating JDOM Document object

org.jdom2 包中具有 Document 类。它表示 XML 文档。此类具有用于访问根元素以及文档级别信息的方法。我们如下创建一个新文档:

Document doc = new Document();

Step 2: Creating and appending Root Element

一个 XML 文档必须包含一个根元素。我们使用 org.jdom2 包的 Element 类创建根元素。如果我们为构造器提供一个字符串,它会使用所提供的本地名称创建元素。

Document 类中的 setRootElement() 方法设置文档的根元素。此方法以 Element 作为参数,并将其设置为根元素。如果根元素已经存在,那么旧的根元素 Element 将被这个提供的 Element 替换。

Element RootElement = new Element("root");
doc.setRootElement(RootElement);

Step 3: Creating elements and attributes

我们可以像在上一步骤中创建根元素一样创建元素。若要设置 Element 的属性,我们使用 setAttribute() 方法,如下所示:

Element newElement = new Element("FirstElement");
newElement.setAttribute("attr_name","attr_value");

Step 4: Appending Elements to Root

在前一步创建的 Element 现在通过 addContent() 方法附加到根元素。此方法以内容列表的形式采用单个元素或元素集合,并将其添加到元素中。

RootElement.addContent(newElement);

Step 5: Writing the content into XML file

TransformerFactory 类用于创建 Transformer 对象的新实例。使用 Transformer 类中的 transform() 函数,源转换为目标结果。我们通过传递文档作为参数来创建 JDOMSource 对象。这个 JDOMSource 对象转换为 StreamResult,如下所示:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
JDOMSource source = new JDOMSource(doc);
StreamResult result = new StreamResult(new File("newFile.xml"));
transformer.transform(source, result);

Step 6: Testing the output using console

这是用于测试目的的可选步骤。为在控制台上打印输出,将创建 XMLOutputter 对象,并传递 Document 对象,如下所示:

XMLOutputter xmlOutput = new XMLOutputter();
xmlOutput.setFormat(Format.getPrettyFormat());
xmlOutput.output(doc, System.out);

Creating Simple XML File

使用以上步骤,让我们创建一个仅具有根元素的简单 XML 文件。将创建一个新的文档对象,并使用 {s0} 方法附加根元素。

Element 对象的 {s1} 方法以 String 的形式获取文本内容并将其附加到 Element。

Example

以下是我们要创建的 XML 文件。它有一个名为“cars”的根元素和文本内容“Ferrari”。

<cars>Ferrari</cars>

下面的 CreateXMLFile.java 创建 XML 文件,并以“cars.xml”为文件名存储在 D 驱动器中。

import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.jdom2.transform.JDOMSource;

public class CreateXMLFile {
   public static void main(String[] args) {
      try{

         //Creating JDOM Document object
         Document doc = new Document();

         //Creating and appending Root Element
         Element carsElement = new Element("cars");
         carsElement.setText("Ferrari");
         doc.setRootElement(carsElement);

         //writing the content into XML file
         TransformerFactory transformerFactory = TransformerFactory.newInstance();
         Transformer transformer = transformerFactory.newTransformer();
         JDOMSource source = new JDOMSource(doc);
         StreamResult result = new StreamResult(new File("D:\\cars.xml"));
         transformer.transform(source, result);

         //Output to console for testing
         XMLOutputter xmlOutput = new XMLOutputter();
         xmlOutput.setFormat(Format.getPrettyFormat());
         xmlOutput.output(doc, System.out);
      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}

出于测试目的,我们在控制台上打印了 XML 文档的内容。

<?xml version="1.0" encoding="UTF-8"?>
<cars>Ferrari</cars>

Creating Attributes

现在让我们向根元素添加子元素。另外,让我们向元素添加属性。在此示例中,我们了解如何创建元素及其属性,以及如何将它们附加到根元素。每个元素上的 {s2} 方法设置属性,并使用 setText() 方法设置每个元素的文本内容。

Example

以下是我们要创建的 cars.xml 文件:

<cars>
<supercars company="Ferrari">
<carname type="formula one">Ferrari 101</carname>
<carname type="sports">Ferrari 202</carname>
</supercars>
</cars>

下面的 {s3} 程序在 D 驱动器中创建 cars.xml 文件。

import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.jdom2.transform.JDOMSource;

public class CreateAttributes {
   public static void main(String[] args) {
      try{

         //Creating JDOM Document object
         Document doc = new Document();

         //Creating and appending Root Element
         Element carsElement = new Element("cars");
         doc.setRootElement(carsElement);

         //Creating elements and attributes
         Element supercarElement = new Element("supercars");
         supercarElement.setAttribute("company","Ferrari");

         Element carElement1 = new Element("carname");
         carElement1.setAttribute("type","formula one");
         carElement1.setText("Ferrari 101");

         Element carElement2 = new Element("carname");
         carElement2.setAttribute("type","sports");
         carElement2.setText("Ferrari 202");

         supercarElement.addContent(carElement1);
         supercarElement.addContent(carElement2);

         //Appending Elements to Root
         carsElement.addContent(supercarElement);

         //writing the content into XML file
         TransformerFactory transformerFactory = TransformerFactory.newInstance();
         Transformer transformer = transformerFactory.newTransformer();
         JDOMSource source = new JDOMSource(doc);
         StreamResult result = new StreamResult(new File("D:\\Jdomcars.xml"));
         transformer.transform(source, result);

         //Output to console for testing
         XMLOutputter xmlOutput = new XMLOutputter();
         xmlOutput.setFormat(Format.getPrettyFormat());
         xmlOutput.output(doc, System.out);
      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}

输出窗口以如下内容显示文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<cars>
  <supercars company="Ferrari">
    <carname type="formula one">Ferrari 101</carname>
    <carname type="sports">Ferrari 202</carname>
  </supercars>
</cars>