更新時間:2022-05-07 11:19:17 來源:動力節點 瀏覽1586次
以下文章動力節點小編提供了 Java XML Parser 的概要。Java 的 XML 解析是一個獨立的 XML 組件,它解析一個 XML 文檔(在某些情況下,一個獨立的 DTD 或 XML 模式),以便它可以被用戶程序處理。它還可能包括一個 XSL 轉換 (XSLT) 處理器,用于使用 XSL 樣式表進行 XML 數據轉換。我們可以使用 XSLT 處理器簡單地將 XML 文檔從 XML 轉換為 XML、XML 轉換為 HTML 或幾乎任何其他基于文本的格式。
一般解析格式如下:
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 Parser 接收 XML 文檔作為輸入。
使用 DOM 或 SAX 解析器接口解析 XML 文檔。
應用程序接收解析的 XML 并進一步完成工作。
SAX 代表 Simple API for XML,而 Push Parser 是面向流的 XML Parser。主要目標是讀取 XML 文件并創建事件以執行調用函數或使用回調例程。此解析器的工作方式與 Java 事件處理程序的工作方式相同。需要注冊處理程序來解析頁面并處理各種事件。
為了提供以下回調,SAX 解析器擴展了 Default Handler 類:
startElement:當找到開始標簽時,觸發此事件。
endElement:當遇到結束標簽時,觸發此事件。
characters:當找到一些文本數據時,觸發該事件。
下面給出了提到的例子:
示例 #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在線學習,里面的課程從入門到精通,細致全面,通俗易懂,適合小白學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習