日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java自带的xml解析_Java自带的XML解析

發布時間:2025/3/19 asp.net 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java自带的xml解析_Java自带的XML解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JAXP(Java API for XML Processing,意為處理XML的Java API)

解析XML一般有兩種方式:

一種是DOM方式:一次性讀取XML內容存入內存

優點:能進行各種增刪改查的操作

確定:占用內存大

使用:給定需要讀取的文件即可讀取,讀取出來之后再根據自己寫的方法進行操作

還有一種是SAX方式:順序讀取內容,碰到什么樣的標簽執行什么樣的操作由自己定義

優點:占用內存小

缺點:不能進行各種增刪改查操作,只能遍歷出內容

使用:給定需要讀取的文件和一個操作集,操作集會指示在遍歷的時候遇到什么凍死做什么事

對xml進行操作就是操作xml文件當中的元素和屬性:文本內容>

由于元素里面的文本內容可以是子元素,而為了閱讀方便通常都是換行另起一行并縮進的,造成了父元素和子元素之間有兩段空格和一個換行,解析xml文檔的時候識別不了,所以也會一并讀取出來

舉例:

XML文件:students.xml

tom

20

male

jerry

19

female

DOM方式實現類:DomDemo.java

package com.jyh.xml.parser;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

public class DomDemo {

public static void main(String[] args) {

//1.獲取jaxp工廠

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

try {

//2.獲取解析器

DocumentBuilder builder = factory.newDocumentBuilder();

//3.用解析器加載xml文檔--->Document

Document document = builder.parse(new File("src/students.xml"));

//4.獲得所有學生集合

NodeList studentList = document.getElementsByTagName("student");

//5.遍歷學生集合

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

//通過下標獲得各個學生

Element stuElm = (Element)studentList.item(i);

//獲取每個學生的學號屬性

String number = stuElm.getAttribute("number");

System.out.println("學號:" + number);

//獲取每個學生下的所有子節點(包括空白)

NodeList childrenList = stuElm.getChildNodes();

//便利子節點集合獲取元素

int length = childrenList.getLength();

for(int j = 0; j < length; j ++){

Node node = childrenList.item(j);

//判斷子節點是不是element元素類型(因為遍歷過程中會遍歷出空格和換行)

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

Element child = (Element) node;

switch (child.getNodeName()) {

case "name":

String name = child.getTextContent();

System.out.println("姓名:" + name);

break;

case "age":

String age = child.getTextContent();

System.out.println("年齡:" + age);

break;

case "sex":

String sex = child.getTextContent();

System.out.println("性別:" + sex);

break;

default:

break;

}

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

這種方式就是對樹進行操作,開始根據根元素名獲取根元素集合:

NodeList studentList = document.getElementsByTagName("student");

然后遍歷根集合獲得每個根元素,由于有了根元素,所以可以根據根節點獲取下面的子元素:

NodeList childrenList = stuElm.getChildNodes();

獲得屬性就用方法

String number = stuElm.getAttribute("number");

輸出結果:

學號:jyh_0001

姓名:tom

年齡:20

性別:male

學號:jyh_0002

姓名:jerry

年齡:19

性別:female

SAX方式實現類:SaxDemo.java和MyHandle.java

SaxDemo.java:

package com.jyh.xml.parser;

import java.io.File;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

public class SaxDemo {

public static void main(String[] args) {

//1.獲得解析器工廠

SAXParserFactory factory = SAXParserFactory.newInstance();

//2.獲得解析器

try {

SAXParser parser = factory.newSAXParser();

//3.解析文檔(告訴去讀取哪個文檔,讀取文檔過程中遇到什么情況該怎么處理)

//第一個參數代表要解析的文檔,第二個參數代表解析文檔過程中遇到什么樣的情況該怎么做

parser.parse(new File("src/students.xml"), new MyHandle());

} catch (Exception e) {

e.printStackTrace();

}

}

}

MyHandle.java:

package com.jyh.xml.parser;

import org.xml.sax.helpers.DefaultHandler;

public class MyHandle extends DefaultHandler{

//文檔開始解析

@Override

public void startDocument() throws org.xml.sax.SAXException {

System.out.println("文檔開始解析");

}

/*遇到元素開始解析

* 參數3是讀取到的元素名稱,參數4是讀取到的元素的屬性集

*/

@Override

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

org.xml.sax.Attributes attributes) throws org.xml.sax.SAXException {

System.out.println(qName + "元素開始解析");

//判斷遇到的是不是學生元素

if(qName.equals("student")){

//如果是則獲取該元素的屬性

String number = attributes.getValue("number");

System.out.println("學號:" + number);

}

}

//遇到文本開始解析

@Override

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

throws org.xml.sax.SAXException {

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

str = str.trim();

if(str.length() > 0){

System.out.println(str);

}

}

//元素解析結束

@Override

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

throws org.xml.sax.SAXException {

System.out.println(qName + "元素解析結束");

}

//文檔結束觸發

@Override

public void endDocument() throws org.xml.sax.SAXException {

System.out.println("文檔解析結束");

}

}

MyHandle里有五個方法:

startDocument();-->開始解析文檔

startElement(String uri, String localName, String qName,org.xml.sax.Attributes attributes);-->碰到元素開始符則開始解析元素

String number = attributes.getValue("number");-->獲取元素的屬性

characters(char[] ch, int start, int length);-->碰到文本開始解析文本

endElement();-->碰到元素結束符,結束元素解析

endDocument(String uri, String localName, String qName);-->結束解析文檔

輸出結果(優化之后):

文檔開始解析

students元素開始解析

student元素開始解析

學號:jyh_0001

name元素開始解析

tom

name元素解析結束

age元素開始解析

20

age元素解析結束

sex元素開始解析

male

sex元素解析結束

student元素解析結束

student元素開始解析

學號:jyh_0002

name元素開始解析

jerry

name元素解析結束

age元素開始解析

19

age元素解析結束

sex元素開始解析

female

sex元素解析結束

student元素解析結束

students元素解析結束

文檔解析結束

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java自带的xml解析_Java自带的XML解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。