专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java XML解析器指南

Java XML解析器指南

更新时间:2022-05-07 11:19:17 来源:动力节点 浏览1143次

以下文章动力节点小编提供了 Java XML Parser 的概要。Java 的 XML 解析是一个独立的 XML 组件,它解析一个 XML 文档(在某些情况下,一个独立的 DTD 或 XML 模式),以便它可以被用户程序处理。它还可能包括一个 XSL 转换 (XSLT) 处理器,用于使用 XSL 样式表进行 XML 数据转换。我们可以使用 XSLT 处理器简单地将 XML 文档从 XML 转换为 XML、XML 转换为 HTML 或几乎任何其他基于文本的格式。

Java XML 解析器的语法

一般解析格式如下:

1. 使用 DOM

DOMParser parser = new DOMParser();

2. 使用 SAX

Parser parser = new SAXParser();

XML(可扩展标记语言)是一种标记语言,它指定了一组用于编码文本的规则。为了解析和处理 XML 文档,Java 提供了几个库。Java xml 解析器示例提供了读取和更改 XML 文件的基本功能。

Java XML 解析器是如何工作的?

在解析 XML 文档时,Java 有很多可能性。

以下是一些最广泛使用的 Java XML 解析器:

DOM

萨克斯

JAXB

XML 流 API (Stax)

JAXB 和 Stax 是 Java 的新版本。Stax 解析器使用游标甚至迭代器 API 来解析 XML 文档。它需要两个接口 Event Reader 和 Event Writer 并且应用程序循环遍历整个文档以等待下一个等待 Event.API 类型的 Stax 被拉取并流式传输,不兼容 Xpath。拉解析允许客户端控制应用程序线程并根据需要调用解析器方法。另一方面,推送处理允许解析器控制应用程序线程,客户端只接受来自解析器的调用。抽象基类是 XMLParser。实例化解析器的 parse() 方法用于读取 XML 文档。

Java XML 解析器工作:

Java 的 XML Parser 接收 XML 文档作为输入。

使用 DOM 或 SAX 解析器接口解析 XML 文档。

应用程序接收解析的 XML 并进一步完成工作。

SAX 解析器

SAX 代表 Simple API for XML,而 Push Parser 是面向流的 XML Parser。主要目标是读取 XML 文件并创建事件以执行调用函数或使用回调例程。此解析器的工作方式与 Java 事件处理程序的工作方式相同。需要注册处理程序来解析页面并处理各种事件。

为了提供以下回调,SAX 解析器扩展了 Default Handler 类:

startElement:当找到开始标签时,触发此事件。

endElement:当遇到结束标签时,触发此事件。

characters:当找到一些文本数据时,触发该事件。

Java XML 解析器示例

下面给出了提到的例子:

示例 #1

Java DOM 解析器。

代码:

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
public class Read {
private static final String FILENAME = "D:\\parser\\amaz.xml";
public static void main(String[] args) {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File(FILENAME));
doc.getDocumentElement().normalize();
System.out.println("Root Element :" + doc.getDocumentElement().getNodeName());
System.out.println("------");
// get <staff>
NodeList list = doc.getElementsByTagName("amz");
for (int temp = 0; temp < list.getLength(); temp++) {
Node node = list.item(temp);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
String id = element.getAttribute("id");
String office = element.getElementsByTagName("office").item(0).getTextContent();
String location = element.getElementsByTagName("location").item(0).getTextContent();
String Country = element.getElementsByTagName("Country").item(0).getTextContent();
NodeList companyNodeList = element.getElementsByTagName("company");
String company = companyNodeList.item(0).getTextContent();
String growth = companyNodeList.item(0).getAttributes().getNamedItem("growth").getTextContent();
System.out.println("Current Element :" + node.getNodeName());
System.out.println("Staff Id : " + id);
System.out.println("office : " + office);
System.out.println("location : " + location);
System.out.println("Country : " +Country);
System.out.printf("company [growth] : %,.2f [%s]%n%n", Float.parseFloat(company), growth);
}
}
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
}

amaz.xml:

此 XML 文件还包含 xml 属性以及 xml 元素。

<?xml version="1.0"?>
<company>
<staff id="1001">
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary currency="USD">100000</salary>
</staff>
<staff id="2001">
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary currency="INR">200000</salary>
</staff>
</company>

解释:

在上面的代码中,首先将 dom 解析器包导入到应用程序中。

接下来,将创建 DocumentBuilder 对象。将 XML 文件带到文档对象中。最后,解析 XML 文件并将其保存在文档类中。

输出:

示例 #2

Java SAX 解析器。

代码:

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Read
{
public static void main(String args[])
{
try
{
SAXParserFactory f = SAXParserFactory.newInstance();
SAXParser saxP= f.newSAXParser();
DefaultHandler hdl = new DefaultHandler()
{
boolean fid = false;
boolean fname = false;
boolean fproduct = false;
boolean discount = false;
boolean dataware = false;
public void startElement( String sg, String pp,String q, Attributes a) throws SAXException
{
System.out.println("First Node :" + q);
if(q.equalsIgnoreCase("FID"))
{
fid=true;
}
if (q.equalsIgnoreCase("FNAME"))
{
fname = true;
}
if (q.equalsIgnoreCase("FPRODUCT"))
{
fproduct = true;
}
if (q.equalsIgnoreCase("DISCOUNT"))
{
discount = true;
}
if (q.equalsIgnoreCase("DATAWARE"))
{
dataware = true;
}
}
public void endElement(String u, String l, String qNa) throws SAXException
{
System.out.println("Final Node:" + qNa);
}
public void characters(char chr[], int st, int len) throws SAXException
{
if (fid)
{
System.out.println("FID : " + new String(chr, st, len));
fid = false;
}
if (fname)
{
System.out.println("Shop details: " + new String(chr, st, len));
sname = false;
}
if (fproduct)
{
System.out.println("Remaining Product: " + new String(chr, st, len));
fproduct = false;
}
if (discount)
{
System.out.println("discount given: " + new String(chr, st, len));
discount = false;
}
if (dataware)
{
System.out.println("location : " + new String(chr, st, len));
dataware= false;
}
}
};
saxParser.parse("D:\\parser\\amaz.xml", handler);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}

amaz.xml:

<?xml version="1.0"?>
<onlineshop>
<flipkart>
<fid>301</fid>
<fname> ethinic</fname>
<fproduct> kurtas</fproduct>
<discount> 10</discount>
<dataware> bangalore</dataware>
</flipkart>
<flipkart>
<fid>401</fid>
<fname> partywear</fname>
<fproduct> saree</fproduct>
<discount> 20</discount>
<dataware> mumbai</dataware>
</flipkart>
<flipkart>
<fid>501</fid>
<fname> kids</fname>
<fproduct> t-shirts</fproduct>
<discount> 12</discount>
<dataware> Uttarpradesh</dataware>
</flipkart>
</onlineshop>

解释:

上面的代码实现了一个 SAX 解析器,它从 Flipkart 购物文件中获取一个新实例。它逐个节点解析。

输出:

结论

Java XML 解析器用于读取和验证 XML 文档。在上面的文章中,我们已经通过一个示例了解了不同类型的解析器。SAX 解析器比 DOM 解析器快。如果大家想了解更多相关知识,不妨来关注一下动力节点的Java在线学习,里面的课程从入门到精通,细致全面,通俗易懂,适合小白学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>