Java之xml解析(Stax方式)

编程入门 行业动态 更新时间:2024-10-22 21:23:11

Java之xml解析(Stax<a href=https://www.elefans.com/category/jswz/34/1771414.html style=方式)"/>

Java之xml解析(Stax方式)

STAX

StAX (Streaming API for XML) 解析器提供了一种流式解析 XML 文档的方式。它类似于 SAX 解析器,但提供了更直观的 API。您可以使用 javax.xml.stream.XMLStreamReader 类来创建一个 StAX 解析器,并使用它逐行读取 XML 文档的内容。StAX 解析器允许您在解析过程中选择性地提取所需的数据,并具有较低的内存消耗。使用 javax.xml.stream.XMLStreamWriter 类来创建一个 StAX 解析器,并使用它逐行写入 XML 文档的内容。

XML与java对象之间的转换
1.xml文件的内容
<?xml version="1.0" encoding="UTF-8"?>
<note type="local"><to>George</to><from>John</from><heading>Reminder</heading>
</note>
2.XML与java对象之间的转换code
package test_stax;import javax.xml.stream.*;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;public class Test {public static void main(String[] args) throws FileNotFoundException {// 读取 XML 文件并转换为 Java 对象Note note = readXMLToObject("C:\\Users\\mats\\IdeaProjects\\xmlParses\\src\\resource\\xml\\hello.xml");System.out.println("Java Object:");System.out.println(note);// 将 Java 对象转换为 XML 文件writeObjectToXML(note, "C:\\Users\\mats\\IdeaProjects\\xmlParses\\src\\resource\\xml\\hello_new.xml");}public static Note readXMLToObject(String xmlFilePath) {Note note = null;XMLInputFactory inputFactory = XMLInputFactory.newInstance();try {XMLStreamReader reader = inputFactory.createXMLStreamReader(xmlFilePath,Thread.currentThread().getContextClassLoader().getResourceAsStream(xmlFilePath));while (reader.hasNext()) {int event = reader.next();if (event == XMLStreamConstants.START_ELEMENT) {if ("note".equals(reader.getLocalName())) {note = new Note();note.setType(reader.getAttributeValue(null, "type"));} else if ("to".equals(reader.getLocalName())) {note.setTo(reader.getElementText());} else if ("from".equals(reader.getLocalName())) {note.setFrom(reader.getElementText());} else if ("heading".equals(reader.getLocalName())) {note.setHeading(reader.getElementText());}}}reader.close();} catch (XMLStreamException e) {e.printStackTrace();}return note;}public static void writeObjectToXML(Note note, String xmlFilePath) {XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();try {XMLStreamWriter writer = outputFactory.createXMLStreamWriter(new FileOutputStream(xmlFilePath), "UTF-8");writer.writeStartDocument("UTF-8", "1.0");writer.writeCharacters("\n");  // 添加换行符writer.writeStartElement("note");writer.writeAttribute("type", note.getType());writer.writeCharacters("\n");  // 添加换行符writer.writeCharacters("    ");  // 添加缩进writer.writeStartElement("to");writer.writeCharacters(note.getTo());writer.writeEndElement();writer.writeCharacters("\n");  // 添加换行符writer.writeCharacters("    ");  // 添加缩进writer.writeStartElement("from");writer.writeCharacters(note.getFrom());writer.writeEndElement();writer.writeCharacters("\n");  // 添加换行符writer.writeCharacters("    ");  // 添加缩进writer.writeStartElement("heading");writer.writeCharacters(note.getHeading());writer.writeEndElement();writer.writeCharacters("\n");  // 添加换行符writer.writeEndElement();writer.writeEndDocument();writer.flush();writer.close();} catch (XMLStreamException | FileNotFoundException e) {e.printStackTrace();}}
}class Note {private String type;private String to;private String from;private String heading;// 构造函数和 getter/setter 方法省略// Getter 和 Setter 方法省略public String getType() {return type;}public void setType(String type) {this.type = type;}public String getTo() {return to;}public void setTo(String to) {this.to = to;}public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}public String getHeading() {return heading;}public void setHeading(String heading) {this.heading = heading;}@Overridepublic String toString() {return "Note{" +"type='" + type + '\'' +", to='" + to + '\'' +", from='" + from + '\'' +", heading='" + heading + '\'' +'}';}
}

更多推荐

Java之xml解析(Stax方式)

本文发布于:2024-03-07 03:55:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1716778.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:方式   Java   xml   Stax

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!