解析複雜的 xml

2021-12-30 09:22:04 字數 4905 閱讀 8798

中規中矩的xml解析,都麼有個啥,關鍵是複雜點的xml解析,而且是複雜點的一類xml,結構一樣,但是內容完全不同

demo.xml:

show

omsfhyczcjsj

ddd系統

bruce

count

okzhogng

廣州2023年第23周 (06.04~06.10)

提供公共解析,如何公共解析,

即編寫公共的獲取xml值的方法。具體看碼:

* 結果集.

public static map> xmldatamaps=new linkedhashmap>();

* 節點個數.

private static map nodemap=new hashmap();

* 通過字串獲得結果.

* @param strval:xml 字串

* @param nodename:節點名稱

public static void getxmlvalbystr(string strval,string nodename) {

if (strval==null || strval.length()==0) {

return;

saxreader sax = new saxreader();

document document = null;

try {

inputstream stream=new bytearrayinputstream(strval.getbytes(constant.encoding));

document = sax.read(stream);

document.setxmlencoding(constant.encoding);

catch (exception e) {

e.printstacktrace();

element root = document.getrootelement();

//獲得節點個數.

getxmlnodes(root,nodename);

int nodes=nodemap.size();

//初始化map集合

initmaps(nodes);

//獲得資料.

getxmlnodesval(root,nodename);

* 通過流獲得結果.

* @param stream:流物件

* @param nodename:節點名稱

public static void getxmlvalbystream(inputstream stream,string nodename) {

if (stream==null) {

return;

saxreader sax = new saxreader();

document document = null;

try {

document = sax.read(stream);

document.setxmlencoding(constant.encoding);

catch (documentexception e) {

e.printstacktrace();

element root = document.getrootelement();

//獲得節點個數.

getxmlnodes(root,nodename);

int nodes=nodemap.size();

//初始化map集合

initmaps(nodes);

//獲得資料.

getxmlnodesval(root,nodename);

* 通過檔案獲得物件.

* @param filepath:檔案絕對路徑

* @param nodename:節點名稱

public static void getxmlvalbyfile(string filepath,string nodename) {

if (filepath==null || filepath.length()==0) {

return;

saxreader sax = new saxreader();

file file=new file(filepath);

document document = null;

try {

document = sax.read(file);

document.setxmlencoding(constant.encoding);

catch (documentexception e) {

e.printstacktrace();

element root = document.getrootelement();

//獲得節點個數.

getxmlnodes(root,nodename);

int nodes=nodemap.size();

//初始化map集合

initmaps(nodes);

//獲得資料.

getxmlnodesval(root,nodename);

* 初始化map集合.

* @param nodes:節點資料.

private static void initmaps(int nodes) {

for (int i = 0; i < nodes; i++) {

map tempvalmap=new linkedhashmap<>();

xmldatamaps.put(constant.maptag+i,tempvalmap);

* 遞迴遍歷所有子節點value

* @param node

* @param nodename

@suppresswarnings("unchecked")

private static void getxmlnodesval(element node,string nodename) {

string tagname=node.getname();

string ta**al=node.gettexttrim();

string attrname ="";

string attrvalue ="";

list listattrs = node.attributes();

for (attribute attribute : listattrs) {

attrname=attribute.getname();

attrvalue=attribute.getvalue();

if (tagname.equalsignorecase(nodename) && attrname.equalsignorecase("id")) {

map actualvals=new linkedhashmap();

string prex=nodename+constant.tag;

string key=attrvalue.substring(prex.length(), attrvalue.length());

list listelement = node.elements();

for (element element : listelement) {

tagname=element.getname();

ta**al=element.gettexttrim();

actualvals.put(tagname, ta**al);

xmldatamaps.put(constant.maptag+key,actualvals);

list listelement = node.elements();

for (element element : listelement) {

getxmlnodesval(element,nodename);

* 獲得節點的個數.

* @param root

* @param nodename

* @return

@suppresswarnings("unchecked")

private static void getxmlnodes(element root,string nodename) {

string tagname=root.getname();

string attrname ="";

string attrvalue ="";

list listattrs = root.attributes();

for (attribute attribute : listattrs) {

attrname=attribute.getname();

attrvalue=attribute.getvalue();

if (tagname.equalsignorecase(nodename) && attrname.equalsignorecase("id") && attrvalue.contains(nodename)) {

string prex=nodename+constant.tag;

string key=attrvalue.substring(prex.length(), attrvalue.length());

nodemap.put(key,attrvalue);

list listelement = root.elements();

for (element element : listelement) {

getxmlnodes(element,nodename);

* 清除記憶體中的資料.

public static void cleardata() {

nodemap.clear();

xmldatamaps.clear();

如此就可以將某類複雜的xml解析完成了,並獲將獲得的值以key,value 的方式儲存起來。

解析XML檔案(SAX方式解析XML)

解析xml檔案 sax方式解析xml 對xml檔案解析有四種方法 dom sax jdom dom4j 現著重講一下sax解析xml檔案。1 通過一定的方式獲取檔名 獲得檔案路徑 string xmlfilepath ticanserviceaccess.getsystemsupportservic...

解析XML檔案(SAX方式解析XML)

解析xml檔案 sax方式解析xml 對xml檔案解析有四種方法 dom sax jdom dom4j 現著重講一下sax解析xml檔案。1 通過一定的方式獲取檔名 獲得檔案路徑 string xmlfilepath ticanserviceaccess.getsystemsupportservic...

JSON解析 XML解析

json解析 1大括號代表字典 2中括號 小括號 代表陣列 3冒號的左右兩邊分別為鍵和值 key value 4資料和資料之間 用逗號隔開 我們在本機上建立乙個file.xml,進行解析,並取出年齡35 json解析 本地讀取student.xm l檔案nsstring jstr nsstring ...