Java中解析XML的方式是什么

  介绍

这篇文章主要介绍了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的方式是什么