Java JDOM 解析器 - 创建 XML 文档



Java JDOM 解析器是一个 Java API,它包含用于从头创建 XML 文档的类和方法。我们可以创建一个新的 JDOM 文档对象,并使用 Document 和 Element 接口中提供的方法添加元素和属性。在本章中,我们将详细介绍如何使用 setRootElement()、addContent()、setText() 和 setAttribute() 方法创建 XML 文件。

使用 Java JDOM 解析器创建 XML

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

  • 步骤 1:创建 JDOM 文档对象
  • 步骤 2:创建和追加根元素
  • 步骤 3:创建元素和属性
  • 步骤 4:将元素追加到根元素
  • 步骤 5:将内容写入 XML 文件
  • 步骤 6:使用控制台测试输出

步骤 1:创建 JDOM 文档对象

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

Document doc = new Document();

步骤 2:创建和追加根元素

XML 文档必须包含一个根元素。我们使用 org.jdom2 包的 Element 类创建根元素。如果我们向构造函数提供一个字符串,它将创建一个具有该提供的本地名称的元素。

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

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

步骤 3:创建元素和属性

我们可以按照上一步创建根元素的方式创建元素。要为 Element 设置属性,我们使用 setAttribute() 方法,如下所示:

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

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

上一步中创建的元素现在使用 addContent() 方法附加到根元素。此方法采用内容列表形式的单个元素或元素集合,并相应地将它们添加到元素中。

RootElement.addContent(newElement);

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

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);

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

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

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

创建简单的 XML 文件

使用上述步骤,让我们创建一个仅包含根元素的简单 XML 文件。创建一个新的文档对象,并使用 setRootElement() 方法附加根元素。

Element 对象的 setText() 方法采用字符串形式的文本内容,并将其附加到 Element。

示例

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

<cars>Ferrari</cars>

下面的 CreateXMLFile.java 创建 XML 文件并将其存储在 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.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>

创建属性

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

示例

这是我们需要创建的 cars.xml 文件:

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

下面的 CreateAttributes.java 程序在 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>
广告