java解析XML的方式有使用DOM解析通过DOM对象以树状结构连接在一起;使用SAX 解析它是遇到不同元素时会逐行解析;使用StAX解析会从XML中提取所需的数据
XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。接下来将要在文章中为大家具体介绍在Java中解析XML的方式,具有一定的参考作用,希望对大家有所帮助
【推荐课程:XML教程】
使用DOM解析
DOM解析器主要用于在内存中使用XML作为对象图(树状结构) 也就是文档对象模型(DOM)。首先解析器遍历输入XML文件并创建与XML文件中的节点相对应的DOM对象。这些DOM对象以树状结构链接在一起。一旦解析器完成了解析过程,就会从中获得这个类似树的DOM对象结构。
例:在所有代码示例中解析xml内容
public class DOMParserDemo { public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse( ClassLoader.getSystemResourceAsStream("xml/employee.xml")); List<Employee> empList = new ArrayList<>(); NodeList nodeList = document.getDocumentElement().getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node instanceof Element) { Employee emp = new Employee(); emp.id = node.getAttributes(). getNamedItem("id").getNodeValue(); NodeList childNodes = node.getChildNodes(); for (int j = 0; j < childNodes.getLength(); j++) { Node cNode = childNodes.item(j); if (cNode instanceof Element) { String content = cNode.getLastChild(). getTextContent().trim(); switch (cNode.getNodeName()) { case "firstName": emp.firstName = content; break; case "lastName": emp.lastName = content; break; case "location": emp.location = content; break; } } } empList.add(emp); } } for (Employee emp : empList) { System.out.println(emp); } } } class Employee{ String id; String firstName; String lastName; String location; @Override public String toString() { return firstName+" "+lastName+"("+id+")"+location; } }
输出结果为:
Rakesh Mishra(111)Bangalore John Davis(112)Chennai Rajesh Sharma(113)Pune
使用SAX 解析
SAX Parser与DOM解析器的不同之处在于SAX解析器不会将完整的XML加载到内存中,而是在遇到不同的元素时,它逐行解析XML,c触发不同的事件,例如:打开标记,结束标记,字符数据,评论等。
使用SAX Parser解析XML的代码如下:
import java.util.ArrayList; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXParserDemo { public static void main(String[] args) throws Exception { SAXParserFactory parserFactor = SAXParserFactory.newInstance(); SAXParser parser = parserFactor.newSAXParser(); SAXHandler handler = new SAXHandler(); parser.parse(ClassLoader.getSystemResourceAsStream("xml/employee.xml"), handler); for ( Employee emp : handler.empList){ System.out.println(emp); } } } class SAXHandler extends DefaultHandler { List<Employee> empList = new ArrayList<>(); Employee emp = null; String content = null; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { switch(qName){ case "employee": emp = new Employee(); emp.id = attributes.getValue("id"); break; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { switch(qName){ case "employee": empList.add(emp); break; case "firstName": emp.firstName = content; break; case "lastName": emp.lastName = content; break; case "location": emp.location = content; break; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { content = String.copyValueOf(ch, start, length).trim(); } } class Employee { String id; String firstName; String lastName; String location; @Override public String toString() { return firstName + " " + lastName + "(" + id + ")" + location; } }
输出结果为:
Rakesh Mishra(111)Bangalore John Davis(112)Chennai Rajesh Sharma(113)Pune
使用StAX Parser
StAX用于XML的Streaming API,而StAX Parser与SA的不同之处在于SAX Parser。StAX解析器也是一种与SAX解析器也是有所不同的
SAX Parser会推送数据,但StAX解析器会从XML中提取所需的数据。StAX解析器将光标维持在文档中的当前位置,允许提取光标处可用的内容,而SAX解析器在遇到某些数据时发出事件。
XMLInputFactory和XMLStreamReader是可用于加载XML文件的两个类。当我们使用XMLStreamReader读取XML文件时,事件以整数值的形式生成,然后将这些事件与XMLStreamConstants中的常量进行比较。以下代码显示了如何使用StAX解析器解析XML:
import java.util.ArrayList; import java.util.List; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; public class StaxParserDemo { public static void main(String[] args) throws XMLStreamException { List<Employee> empList = null; Employee currEmp = null; String tagContent = null; XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory.createXMLStreamReader( ClassLoader.getSystemResourceAsStream("xml/employee.xml")); while(reader.hasNext()){ int event = reader.next(); switch(event){ case XMLStreamConstants.START_ELEMENT: if ("employee".equals(reader.getLocalName())){ currEmp = new Employee(); currEmp.id = reader.getAttributeValue(0); } if("employees".equals(reader.getLocalName())){ empList = new ArrayList<>(); } break; case XMLStreamConstants.CHARACTERS: tagContent = reader.getText().trim(); break; case XMLStreamConstants.END_ELEMENT: switch(reader.getLocalName()){ case "employee": empList.add(currEmp); break; case "firstName": currEmp.firstName = tagContent; break; case "lastName": currEmp.lastName = tagContent; break; case "location": currEmp.location = tagContent; break; } break; case XMLStreamConstants.START_DOCUMENT: empList = new ArrayList<>(); break; } } for ( Employee emp : empList){ System.out.println(emp); } } } class Employee{ String id; String firstName; String lastName; String location; @Override public String toString(){ return firstName+" "+lastName+"("+id+") "+location; } }
输出结果为:
Rakesh Mishra(111) Bangalore John Davis(112) Chennai Rajesh Sharma(113) Pune
总结:以上就是本篇文章的全部内容了,希望对大家有所帮助
以上是Java中解析XML的方式有哪些的详细内容。更多信息请关注PHP中文网其他相关文章!

RSS文档是一种简便的订阅机制,通过XML文件发布内容更新。1.RSS文档结构由和元素组成,包含多个。2.使用RSS阅读器订阅频道,并通过解析XML提取信息。3.高级用法包括使用feedparser库进行过滤和排序。4.常见错误包括XML解析和编码问题,调试时需验证XML格式和编码。5.性能优化建议包括缓存RSS文档和异步解析。

RSS和XML在现代Web中依然重要。1.RSS用于发布和分发内容,用户可通过RSS阅读器订阅并获取更新。2.XML作为标记语言,支持数据存储和交换,RSS文件基于XML。

RSS可以实现多媒体内容嵌入、条件订阅、以及性能和安全性优化。1)通过标签嵌入多媒体内容,如音频和视频。2)使用XML命名空间实现条件订阅,允许订阅者根据特定条件筛选内容。3)通过CDATA节和XMLSchema优化RSSFeed的性能和安全性,确保稳定性和符合标准。

RSS是一种基于XML的格式,用于发布常更新的数据。作为Web开发者,理解RSS能提升内容聚合和自动化更新能力。通过学习RSS结构、解析和生成方法,你将能自信地处理RSSfeeds,优化Web开发技能。

RSS选择XML而不是JSON是因为:1)XML的结构化和验证能力优于JSON,适合RSS复杂数据结构的需求;2)XML当时有广泛的工具支持;3)RSS早期版本基于XML,已成标准。

RSS是一种基于XML的格式,用于订阅和阅读频繁更新的内容。它的工作原理包括生成和消费两部分,使用RSS阅读器可以高效获取信息。

RSS文档的核心结构包括XML标签和属性,具体解析和生成步骤如下:1.读取XML文件,处理和标签。2.提取、、等标签信息。3.处理自定义标签和属性,确保版本兼容性。4.使用缓存和异步处理优化性能,确保代码可读性。

JSON、XML和RSS的主要区别在于结构和用途:1.JSON适用于简单数据交换,结构简洁,易于解析;2.XML适合复杂数据结构,结构严谨但解析复杂;3.RSS基于XML,用于内容发布,标准化但用途有限。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver Mac版
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器