【Java】XML文件的解析
程序员文章站
2022-07-02 13:46:48
这是我们的XML文件,对其进行解析 结果如下 ......
1 import java.io.file; 2 import java.io.fileinputstream; 3 import java.io.filenotfoundexception; 4 import java.io.ioexception; 5 import java.io.inputstream; 6 7 import javax.xml.parsers.documentbuilder; 8 import javax.xml.parsers.documentbuilderfactory; 9 import javax.xml.parsers.parserconfigurationexception; 10 11 import org.w3c.dom.document; 12 import org.w3c.dom.element; 13 import org.w3c.dom.nodelist; 14 import org.xml.sax.saxexception; 15 16 public abstract class xmlreader { 17 // 只需要一份 documentbuilder 18 private static documentbuilder documentbuilder; 19 20 static { 21 try { 22 documentbuilder = documentbuilderfactory 23 .newinstance() 24 .newdocumentbuilder(); 25 } catch (parserconfigurationexception e) { 26 e.printstacktrace(); 27 } 28 } 29 30 public xmlreader() { 31 } 32 33 // 获取document,document是w3c的,不要导错了 34 public static document opendocument(inputstream is) { 35 document document = null; 36 try { 37 document = documentbuilder.parse(is); 38 } catch (saxexception | ioexception e) { 39 e.printstacktrace(); 40 } finally { 41 try { 42 is.close(); 43 } catch (ioexception e) { 44 e.printstacktrace(); 45 } 46 } 47 48 return document; 49 } 50 51 public static document opendocument(string xmlpath) { 52 inputstream is = xmlreader.class.getresourceasstream(xmlpath); 53 if (is == null) { 54 try { 55 // 自定义异常 56 throw new xmlfilenotexistexception("文件[" + xmlpath+ "]不存在!"); 57 } catch (xmlfilenotexistexception e) { 58 e.printstacktrace(); 59 } 60 } 61 62 return opendocument(is); 63 } 64 65 public static document opendocument(file path) { 66 inputstream is = null; 67 try { 68 is = new fileinputstream(path); 69 } catch (filenotfoundexception e) { 70 e.printstacktrace(); 71 } 72 return opendocument(is); 73 } 74 75 // 抽象方法,由用户自行处理得到的标签 76 public abstract void dealelment(element element, int index); 77 78 // 抽象方法在for循环中,每次读取到一个标签,就交给抽象方法,由用户自行使用 79 public xmlreader parse(element element, string tagname) { 80 nodelist nodelist = element.getelementsbytagname(tagname); 81 82 for (int index = 0; index < nodelist.getlength(); index++) { 83 element ele = (element) nodelist.item(index); 84 85 dealelment(ele, index); 86 } 87 88 return this; 89 } 90 91 public xmlreader parse(document document, string tagname) { 92 nodelist nodelist = document.getelementsbytagname(tagname); 93 94 for (int index = 0; index < nodelist.getlength(); index++) { 95 element element = (element) nodelist.item(index); 96 97 dealelment(element, index); 98 } 99 100 return this; 101 } 102 103 }
这是我们的xml文件,对其进行解析
1 <?xml version="1.0" encoding="utf-8"?> 2 <test> 3 <class name = "第一个标签" type = "firstlable"> 4 <parameter id = "one" value = "一"></parameter> 5 <parameter id = "two" value = "二"></parameter> 6 <parameter id = "thr" value = "三"></parameter> 7 </class> 8 <class name = "第二个标签" type = "secondlable"> 9 <parameter id = "four" value = "四"></parameter> 10 <parameter id = "six" value = "五"></parameter> 11 </class> 12 </test>
public static void main(string[] args) { new xmlreader() { @override public void dealelment(element element, int index) { string name = element.getattribute("name"); string type = element.getattribute("type"); system.out.println("name=" + name + " type=" + type); new xmlreader() { @override public void dealelment(element element, int index) { string id = element.getattribute("id"); string value = element.getattribute("value"); system.out.println("\tid=" + id + " value=" + value); } }.parse(element, "parameter"); } }.parse(xmlreader.opendocument("/test.xml"), "class"); }
结果如下