介绍
这篇文章主要介绍了Java中解析XML的方式是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
Java解析XML的方式有使用DOM解析通过DOM对象以树状结构连接在一起,使用SAX解析它是遇到不同元素时会逐行解析;使用StAX解析会从XML中提取所需的数据
XML是一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。
<强>使用DOM解析强>
DOM解析器主要用于在内存中使用XML作为对象图(树状结构)也就是文档对象模型(DOM),首先解析器遍历输入XML文件并创建与XML文件中的节点相对应的DOM对象。这些DOM对象以树状结构链接在一起。一旦解析器完成了解析过程,就会从中获得这个类似树的DOM对象结构。
例:在所有代码示例中解析XML内容
公共类DOMParserDemo { 公共静态void main (String [] args){抛出异常 DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance (); DocumentBuilder builder=factory.newDocumentBuilder (); 文档文件=builder.parse ( ClassLoader.getSystemResourceAsStream (“xml/employee.xml")); List,empList=new ArrayList<的在(); 节点列表节点列表=document.getDocumentElement () .getChildNodes (); for (int i=0;我& lt;nodeList.getLength ();我+ +){ 节点的节点=nodeList.item(我); 如果(节点实例元素){ 员工emp=新员工(); emp.id=node.getAttributes ()。 getNamedItem (“id") .getNodeValue (); 节点列表子节点的时候存在缺陷=node.getChildNodes (); for (int j=0;j & lt;childNodes.getLength ();j + +) { 节点cNode=childNodes.item (j); 如果(cNode instanceof元素){ 字符串内容=cNode.getLastChild ()。 .trim getTextContent () (); 开关(cNode.getNodeName ()) { 例“firstName": emp.firstName=内容; 打破; 例“lastName": emp.lastName=内容; 打破; 例“location": emp.location=内容; 打破; } } } empList.add (emp); } } (雇员emp: empList) { System.out.println (emp); } } } 类员工{ 字符串id; 字符串firstName; 字符串姓; 字符串的位置; @Override 公共字符串toString () { 返回firstName +“;“+姓+“(“+身份证+“)“+位置; } }
<>强输出结果为:强>
拉克什米希拉(111)班加罗尔 约翰·戴维斯(112年)钦奈 拉杰什·夏尔马(113)浦那
<强>使用SAX解析强>
SAX解析器与DOM解析器的不同之处在于SAX解析器不会将完整的XML加载到内存中,而是在遇到不同的元素时,它逐行解析XML, c触发不同的事件,例如:打开标记,结束标记,字符数据,评论等。
使用SAX解析器解析XML的代码如下:
进口java.util.ArrayList; 进口并不知道; 进口javax.xml.parsers.SAXParser; 进口javax.xml.parsers.SAXParserFactory; 进口org.xml.sax.Attributes; 进口org.xml.sax.SAXException; 进口org.xml.sax.helpers.DefaultHandler; 公开课SAXParserDemo { 公共静态void main (String [] args){抛出异常 SAXParserFactory parserFactor=SAXParserFactory.newInstance (); SAXParser解析器=parserFactor.newSAXParser (); SAXHandler处理程序=new SAXHandler (); parser.parse (ClassLoader.getSystemResourceAsStream (“xml/employee.xml"), 处理程序); (雇员emp: handler.empList) { System.out.println (emp); } } } 继承DefaultHandler类SAXHandler { List,empList=new ArrayList<的在(); 员工emp=零; 字符串内容=零; @Override 公共空间startElement (String uri, String localName, 字符串qName,属性属性) 抛出SAXException { 开关(qName) { 例“employee": emp=新员工(); emp.id=attributes.getValue (“id"); 打破; } } @Override 公共空间endElement (String uri, String localName, 字符串qName)抛出SAXException { 开关(qName) { 例“employee": empList.add (emp); 打破; 例“firstName": emp.firstName=内容; 打破; 例“lastName": emp.lastName=内容; 打破; 例“location": emp.location=内容; 打破; } } @Override 公共空白字符(char [] ch, int, int长度) 抛出SAXException { 内容=字符串。copyValueOf (ch、启动、长度).trim (); } } 类员工{ 字符串id; 字符串firstName; 字符串姓; 字符串的位置; @Override 公共字符串toString () { 返回firstName +“;“;+姓+“(“+身份证+“),+位置; } } Java中解析XML的方式是什么