用java解析xml的方法及实例

481 阅读4分钟

xml parsing with java

用java解析xml简介

XML是Extensive Markup Language的缩写,它是为了按照定义好的规则对文件进行编码而创建的,使内容成为可读的格式,而XML解析器则是通过浏览整个XML文件来修改或访问XML文件中的数据。在java中,XML解析器是一个独立的组件,用于浏览XML文档。

什么是java的xml解析?

XML解析器负责通过扫描整个XML文件来检查和验证你的XML文件的格式,并且还提供访问或修改其中数据的功能。在XML的开发过程中,最重要的部分是XML解析。在java中,XML解析器是一个独立的XML组件,它有助于解析DTD独立文件、XML文档甚至是XML模式。这个被解析的XML文档可以被用户进一步处理。

使用java进行xml解析的步骤

在解析XML文档时,我们需要遵循下面列出的步骤

  • 所有与XML相关的包都应该在一开始就被导入。
  • 应该创建DocumentBuilder的新实例。
  • 从可用的流或文件中,你应该创建一个文档
  • 根元素应该被提取出来。
  • 属性和子元素应该被检查。

Java XML解析器 - DOM

文档对象模型(DOM)是一个基于树的应用编程接口,为传递给它的相应的XML文档在内存中创建一个树形结构或表示。DOM伴随着方法和类,可用于处理树状结构并在应用程序中进行导航。

DOM的接口是XML树中最有用的组件,它可以用来操作结构。这些操作包括删除或添加新旧属性和元素,元素重新排序,重命名现有的元素和许多其他。

当我们需要在我们的应用程序中随机访问元素的时候,DOM API是首选。DOM也可以在XSL转换任务中使用,或者在调用XPath时使用。简而言之,我们可以说,只要有要求在树中使用迭代,需要扫描或访问整个文档,那么我们就可以使用DOM API。我们也可以在DOM中定制树的构建过程。为了减少XML文档中管道的大小,我们可以在DOM API中更多的使用属性而不是元素。

创建一个DocumentBuilder-用java解析xml

为了创建一个文档生成器的实例,我们需要有一个文档生成器工厂类的对象,可以通过使用下面的代码片段来创建。

DocumentBuilderFactory instanceOfFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder instanceOFBuilder = instanceOfFactory.newDocumentBuilder();

演示例子--用java解析xml

现在让我们考虑一个例子,它将帮助我们理解在 "用java进行xml解析的步骤 "一节中提到的所有步骤的实现,这将使我们对XML文档解析的Dom解析器的理解更加清晰。我们将有两个文件,其中一个是主要的XML文件,它将是解析的输入文件,另一个是java文件,它将解析该文件并通过访问XML文件形成的树的所有节点生成输出。

需要解析的文件将是如下所示的XML文件

xml文件 -

<?xml version = "1.0"?>
<class>
<article articleNo = "393">
<topic>Android Auto</topic>
<nameOfAuthor>Payal</nameOfAuthor>
<genre>Android Auto</genre>
<numberOfPages>85</numberOfPages>
</article>
<article articleNo = "493">
<topic>PostgreSQL</topic>
<nameOfAuthor>Mayur</nameOfAuthor>
<genre>Database</genre>
<numberOfPages>95</numberOfPages>
</article>
<article articleNo = "593">
<topic>MySQL</topic>
<nameOfAuthor>Meera</nameOfAuthor>
<genre>DBMS</genre>
<numberOfPages>90</numberOfPages>
</article>
</class>

现在,我们需要在java中编写一个类,该类可以编写业务逻辑,并尝试使用DOM解析器解析XML文件,其名称为EducbaDomParserExample,文件的内容如下所示

EducbaDomParserExample.java
package com.educba.xml;
import java.io.File;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
public class EducbaDomParserExample {
public static void main(String[] args) {
try {
File xmlFileToParse = new File("educbaXML.txt");
DocumentBuilderFactory instanceOfDocBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder educbaDocBuilderObj = instanceOfDocBuilderFactory.newDocumentBuilder();
Document sampleDocument = educbaDocBuilderObj.parse(xmlFileToParse);
sampleDocument.getDocumentElement().normalize();
System.out.println("Element present at the root of the tree :" + sampleDocument.getDocumentElement().getNodeName());
NodeList nodeListInstance = sampleDocument.getElementsByTagName("article");
System.out.println("__________________________");
for (int temporaryVar = 0; temporaryVar < nodeListInstance.getLength(); temporaryVar++) {
Node singleNode = nodeListInstance.item(temporaryVar);
System.out.println("\nElement Being Traversed :" + singleNode.getNodeName());
if (singleNode.getNodeType() == Node.ELEMENT_NODE) {
Element particulerElement = (Element) singleNode;
System.out.println("Article Number : "
+ particulerElement.getAttribute("articleNo"));
System.out.println("Topic: "
+ particulerElement
.getElementsByTagName("topic")
.item(0)
.getTextContent());
System.out.println("Author Name : "
+ particulerElement
.getElementsByTagName("nameOfAuthor")
.item(0)
.getTextContent());
System.out.println("Genre: "
+ particulerElement
.getElementsByTagName("genre")
.item(0)
.getTextContent());
System.out.println("Number Of Pages : "
+ particulerElement
.getElementsByTagName("numberOfPages")
.item(0)
.getTextContent());
}
}
} catch (Exception sampleException) {
sampleException.printStackTrace();
}
}
}

执行上述java文件的输出将产生如下图所示的结果。xml parsing with java output

结论

XML文件或文档是一种可扩展的标记语言文件,将通过使用各种类型的解析器,如DOM解析器,SAX解析器等,在java应用程序中进行解析。在这篇文章中,我们看到,我们如何将XML文件转换成树状结构,显示内存中的所有层次结构,以及我们如何在java程序中访问或修改每个元素或属性。