java統計xml解析doc(純JAVA實現xml數據生成解析)

本文目錄一覽:

java xml解析,數據讀取

SAXBuilder sb = new SAXBuilder();//建立構造器  

        Document doc;

        try {

            doc = sb.build(“E:/userinfod301.xml”); //讀入指定文件

            Element root = doc.getRootElement();//獲得根節點  

            List list = root.getChildren();//將根節點下的所有ObjectInstance子節點放入List中  

            for (int i = 0; i  list.size(); i++) {

                ListElement listNext = ((Element) list.get(i)).getChildren();//將ObjectInstance節點下的所有Attribute放入List中  

                for (int j = 0; j  listNext.size(); j++) {

                    Element sub = (Element) listNext.get(j);//取得節點實例  

                    System.out.println(sub.getAttribute(“name”).getValue());

                    System.out.println(sub.getText());

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

不知道是不是你想要的   效果

java XML解析詳解

(I)Java通過DOM解析XML

1得到DOM解析器的工廠實例

DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();

得到javax.xml.parsers.DocumentBuilderFactory;類的實例就是我們要的解析器工廠

2從DOM工廠獲得DOM解析器

DocumentBuilder dombuilder=domfac.newDocumentBuilder();

通過javax.xml.parsers.DocumentBuilderFactory實例的靜態方法newDocumentBuilder()得到DOM解析器

3把要解析的XML文檔轉化為輸入流,以便DOM解析器解析它

InputStream is=new FileInputStream(“bin/library.xml”);

InputStream是一個接口。

4解析XML文檔的輸入流,得到一個Document

Document doc=dombuilder.parse(is);

由XML文檔的輸入流得到一個org.w3c.dom.Document對象,以後的處理都是對Document對象進行的

5得到XML文檔的根節點

Element root=doc.getDocumentElement();

在DOM中只有根節點是一個org.w3c.dom.Element對象。

6得到節點的子節點

NodeList books=root.getChildNodes();

for(int i=0;ibooks.getLength();i++){

Node book=books.item(i);

}

這是用一個org.w3c.dom.NodeList接口來存放它所有子節點的,還有一種輪循子節點的方法,後面有介紹

7取得節點的屬性值

String email=book.getAttributes().getNamedItem(“email”).getNodeValue();

System.out.println(email);

注意,節點的屬性也是它的子節點。它的節點類型也是Node.ELEMENT_NODE

8輪循子節點

for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()){

if(node.getNodeType()==Node.ELEMENT_NODE){

if(node.getNodeName().equals(“name”)){

String name=node.getNodeValue();

String name1=node.getFirstChild().getNodeValue();

 …

if(node.getNodeName().equals(“price”)){

String price=node.getFirstChild().getNodeValue();

Java通過SAX解析XML

Simple API for XML(簡稱SAX)是個循序存取XML的解析器API。

一個實現SAX的解析器(也就是「SAX Parser」)以一個串流解析器的型式作用,擁有事件驅動API。由使用者定義回調函數,解析時,若發生事件的話會被調用。SAX事件包括:

XML 文字 節點

XML 元素 節點

XML 處理指令

XML 注釋

Java代碼

person

user

username謝成志/username

password6626310xie/password

sex男/sex

birthday1988/11/28/birthday

headpic

pictitleermao/pictitle

picurlimages/head1.jpg/picurl

/headpic

/user

/person

此為下面即將解析度簡單xml結構,並將其封裝成一個User對象。

////////////////////////////////////////////////////////////////////////////////////

Java代碼

span style=”font-family: courier new,courier; font-size: small;”package com.xcz.xml;

import java.io.File;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

import com.xcz.util.SaxUtil;

public class Sax4XML {

public static void main(String[] args) {

try {

//1.獲取factory

SAXParserFactory factory = SAXParserFactory.newInstance();

//2.獲取parser

SAXParser parser = factory.newSAXParser();

//3.獲取解析時的監聽器對象

SaxUtil su = new SaxUtil();

//4.開始解析

parser.parse(new File(“src/user-params.xml”), su);

System.out.println(su.getUser());

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/span

////////////////////////////////////////////////////////////////////////////////////

Java代碼

span style=”font-family: courier new,courier; font-size: small;”package com.xcz.util;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import com.xcz.po.HeadPic;

import com.xcz.po.User;

/**

* 定義xml解析時的監聽類

*

* 實現方式有很多,可以實現接口:ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler

* 但我們常用的繼承:DefaultHandler

*/

public class SaxUtil extends DefaultHandler {

private User user;

private HeadPic headPic;

private String content;

private SimpleDateFormat sdf = new SimpleDateFormat(“yyyy/MM/dd”);

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

content = new String(ch, start, length);

}

//當解析到文本開始時觸發

@Override

public void startDocument() throws SAXException {

super.startDocument();

}

//當解析到文本結束時觸發

@Override

public void endDocument() throws SAXException {

super.endDocument();

}

//當解析到元素開始時觸發

@Override

public void startElement(String uri, String localName, String name,

Attributes attributes) throws SAXException

{

if(“user”.equals(name))

{

user = new User();

}

if(“headpic”.equals(name))

{

headPic = new HeadPic();

}

}

//當解析到元素結束時觸發

@Override

public void endElement(String uri, String localName, String name)

throws SAXException

{

if(“username”.equals(name))

{

user.setUsername(content);

}

if(“password”.equals(name))

{

user.setPassword(content);

}

if(“sex”.equals(name))

{

user.setSex(content);

}

if(“birthday”.equals(name))

{

try {

user.setBirthday(sdf.parse(content));

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if(“pictitle”.equals(name))

{

headPic.setPicTitle(content);

}

if(“picurl”.equals(name))

{

headPic.setPicUrl(content);

user.setHeadPic(headPic);

}

}

public User getUser(){

return user;

}

}/span

[優點]

(1).節約內存開銷

SAX解析器在某些方面優於DOM風格解析器,因為SAX解析器的內存使用量一般遠低於DOM解析器使用量。DOM解析器在任何處理開始之前,必須將xml以整棵樹放在內存,所以DOM解析器的內存使用量完全根據輸入資料的大小。相對來說,SAX解析器的內存內容,是只基於XML檔案的最大深度(XML樹的最大深度)和單一XML項目上XML屬性儲存的最大資料。

(2)解析速度快

因為SAX事件驅動的本質,處理文件通常會比DOM風格的解析器快。

[缺點]

SAX事件驅動的模型對於XML解析很有用,但它確實有某些缺點。

某些種類的XML驗證需要存取整份文件。例如,一個DTD IDREF屬性需要文件內有項目使用指定字串當成DTD ID屬性。要在SAX解析器內驗證,必須追蹤每個之前遇過的ID和IDREF屬性,檢查是否有任何相符。更甚者,一個IDREF找不到對應的ID,使用者只會在整份文件都解析完後才發現,若這種連結對於建立有效輸出是重要的,那用在處理整份文件的時間只是浪費。

請問XML用java如何解析

我是使用DOM解析XML文檔。。。希望對你有用

–XML簡單使用的代碼

package com.osekj.music;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.*;

public class TestDOM {

/**

* @param args

*/

public static void main(String[] args) {

// 1、得到DOM解析器的工廠實例

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

try {

// 2、從DOM工廠獲得DOM解析器

DocumentBuilder db = dbf.newDocumentBuilder();

// 3、解析XML文檔,得到一個Document,即DOM樹

Document doc = db.parse(“my.xml”); //項目下的XML文件

// 4、得到所有DOG節點列表信息

NodeList dogList = doc.getElementsByTagName(“dog”);

System.out.println(“xml文檔中共有” + dogList.getLength() + “條狗狗信息”);

// 5、輪循狗狗信息

for (int i = 0; i dogList.getLength(); i++) {

// 5.1、獲取第i個狗狗元素信息

Node dog = dogList.item(i);

// 5.2、獲取第i個狗狗元素的id屬性的值並輸出

Element element = (Element) dog;

String attrValue = element.getAttribute(“id”);

System.out.println(“id:” + attrValue);

// 5.3、獲取第i個狗狗元素的所有子元素的名稱和值並輸出

for (Node node = dog.getFirstChild(); node != null; node = node.getNextSibling()) {

if (node.getNodeType() == Node.ELEMENT_NODE) {

String name = node.getNodeName();

String value = node.getTextContent();

System.out.print(name + “:” + value + “\t”);

}

}

System.out.println();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

java中xml的解析有哪些

(I)Java通過DOM解析XML

1得到DOM解析器的工廠實例

DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();

得到javax.xml.parsers.DocumentBuilderFactory;類的實例就是我們要的解析器工廠

2從DOM工廠獲得DOM解析器

DocumentBuilder dombuilder=domfac.newDocumentBuilder();

通過javax.xml.parsers.DocumentBuilderFactory實例的靜態方法newDocumentBuilder()得到DOM解析器

3把要解析的XML文檔轉化為輸入流,以便DOM解析器解析它

InputStream is=new FileInputStream(“bin/library.xml”);

InputStream是一個接口。

4解析XML文檔的輸入流,得到一個Document

Document doc=dombuilder.parse(is);

由XML文檔的輸入流得到一個org.w3c.dom.Document對象,以後的處理都是對Document對象進行的

5得到XML文檔的根節點

Element root=doc.getDocumentElement();

在DOM中只有根節點是一個org.w3c.dom.Element對象。

6得到節點的子節點

NodeList books=root.getChildNodes();

for(int i=0;ibooks.getLength();i++){

Node book=books.item(i);

}

java的xml的解析方式有什麼,他們的解析流程是怎麼樣的,有什麼區別

答:4種。(或者說是兩種,因為JDOM和DOM4J是DOM的兩個特殊情況)

1.SAX解析

解析方式是事件驅動機制!

SAX解析器,逐行讀取XML文件解析,每當解析到一個標籤的開始/結束/內容/屬性時,觸發事件。

可以在這些事件發生時,編寫程序進行相應的處理。

優點:

分析能夠立即開始,而不是等待所有的數據被處理。

逐行加載,節省內存,有助於解析大於系統內存的文檔。

有時不必解析整個文檔,它可以在某個條件得到滿足時停止解析。

缺點:

1.單向解析,無法定位文檔層次,無法同時訪問同一個文檔的不同部分數據(因為逐行解析,當解析第n行時,第n-1行)已經被釋放了,無法再對其進行操作)。

2. 無法得知事件發生時元素的層次, 只能自己維護節點的父/子關係。

3. 只讀解析方式, 無法修改XML文檔的內容。

2. DOM解析

是用與平台和語言無關的方式表示XML文檔的官方W3C標準,分析該結構通常需要加載整個 文檔和內存中建立文檔樹模型。程序員可以通過操作文檔樹, 來完成數據的獲取 修改 刪除等。

優點:

文檔在內存中加載, 允許對數據和結構做出更改。訪問是雙向的,可以在任何時候在樹中雙向解析數據。

缺點:

文檔全部加載在內存中 , 消耗資源大。

3. JDOM解析

目的是成為Java特定文檔模型,它簡化與XML的交互並且比使用DOM實現更快。由於是第一 個Java特定模型,JDOM一直得到大力推廣和促進。

JDOM文檔聲明其目的是「使用20%(或更少)的精力解決80%(或更多)Java/XML問題」 (根據學習曲線假定為20%)

優點:

使用具體類而不是接口,簡化了DOM的API。

大量使用了Java集合類,方便了Java開發人員。

缺點:

沒有較好的靈活性。

性能不是那麼優異。

4. DOM4J解析

它是JDOM的一種智能分支。它合併了許多超出基本XML文檔表示的功能,包括集成的XPath 支持、XML Schema支持以及用於大文檔或流化文檔的基於事件的處理。它還提供了構建文檔表示的選項, DOM4J是一個非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一 個開放源代碼的軟件。如今你可以看到越來越多的Java軟件都在使用DOM4J來讀寫XML。

目前許多開源項目中大量採用DOM4J , 例如:Hibernate。

原創文章,作者:NEPR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/144024.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NEPR的頭像NEPR
上一篇 2024-10-24 15:26
下一篇 2024-10-24 15:27

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29

發表回復

登錄後才能評論