当前位置: 主页 > JAVA语言

xml中的属性赋值 java-java 反射为属性赋值

发布时间:2023-05-15 16:12   浏览次数:次   作者:佚名

提示:学习使用,仅供参考!

目录

一、解析

使用程序去读取序读取XML中的数据

在这里插入图片描述

二、分类 2.1 SAX 解析

基于事件驱动的解析方式,采用串行读取方式,逐行读取,读取一行解析一行。

优:性能好,属于事件驱动型解析xml中的属性赋值 java,解析逐行解析,解析速度快

缺:不能重复使用数据,如果要修改,或者回头查找数据,必须重新从头读取一次

2.2 DOM 解析

官方定义的一套规则,把整个XML读取到内存,以树型结构来存储

java注解属性赋值_java 反射为属性赋值_xml中的属性赋值 java

优:重复使用

缺:解析速度慢,只能解析小型xml

DOM解析解析文档对象模型

在这里插入图片描述

三、方式

几乎所有的解析实现,都结合了解析的两种分类

3.1 jdom

// 工厂对象
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
// DocumentBuilder对象
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// 输入流
InputStream in = JdomTest.class.getClassLoader().getResourceAsStream("book.xml");
// Document对象
Document document = documentBuilder.parse(in);
// 获取根元素
Element root = document.getDocumentElement();
// 获得节点元素
NodeList bookList = root.getElementsByTagName("book");
// 获得第一个本书
Element student = (Element) studentList.item(0);
// 获得第一本书的姓名
Node stuName = student.getElementsByTagName("name").item(0);
String textContent = stuName.getTextContent();

3.2 dom4j

通过SAX方式读取XMLxml中的属性赋值 java,形成一个DOM存储在内存里面

SAXReader类

java注解属性赋值_xml中的属性赋值 java_java 反射为属性赋值

方法名说明

SAXReader()

创建 DOM4J 解析器对象

read( url ):Document

加载XML文档,生成Document对象

Document

方法名说明

getRootElement() :Element

获得 XML 文档的根元素对象

ELement

方法名说明

xml中的属性赋值 java_java注解属性赋值_java 反射为属性赋值

elements() :List< Element >

获得当前 element 下的所有子元素

elements(String name):List< Element >

获得当前 element 下指定名字为 name 的子元素集合

element(String name):Element

返回当前 element 下指定名字为 name 的第一个子元素

getName():String

获得当前 element 的名字

attributeValue(String name):String

获取属性名为 name 的属性值

elementText(子元素名):String

java 反射为属性赋值_xml中的属性赋值 java_java注解属性赋值

获得当前元素指定名字的子元素的文本内容

getText():String

得到当前元素的文本内容

主要步骤:

// 获得资源文档的输入流
InputStream in = Dom4jTest.class.getClassLoader().getResourceAsStream("book.xml");
// 生成 document 对象
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(in);
// 获得根元素对象
Element root = document.getRootElement();
// 获得 root 下元素名为 "book" 的所有子节点
List<Element> books = root.elements("book");
// 获得 root 下的所有子元素
List<Element> all = root.elements();
// 获得具体某个节点
Element book = (Element) books.get(0)
Element firstSubEl = root.element("book")
// 获得根元素的名字:books
String rootName = root.getName()
// 获得元素属性值
String value = book.atttributeValue("id")
// 获得子元素的文本内容:西游记
String text = book.elementText("name");
String text1 = firstSubEl.element("name").getText()

3.2.1 增强 for 循环遍历

InputStream in = Dom4JForEach.class.getClassLoader().getResourceAsStream("book.xml");
// 生成 document 对象
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(in);
Element root = document.getRootElement();
List<Element> elementList = root.elements("book");
List<Book> bookList = new ArrayList<>();
for (Element el : elementList) {
    Book book = new Book();
    book.setId(Integer.valueOf(el.element("id").getText()));
    book.setName(el.element("name").getText());
    book.setAuthor(el.element("author").getText());
    book.setPrice(Integer.valueOf(el.element("price").getText()));
    bookList.add(book);
}

3.2.2 迭代器遍历

InputStream in = Dom4JForEach.class.getClassLoader().getResourceAsStream("book.xml");
// 生成 document 对象
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(in);
Element root = document.getRootElement();
Iterator<Element> elIterator = root.elementIterator();
Book book = new Book();
while (elIterator.hasNext()) {
    Element el = elIterator.next();
    String name = el.element("name").getText();
    if (name.equals(bookName)) {
        book.setName(name);
        book.setId(Integer.valueOf(el.element("id").getText()));
        book.setAuthor(el.elementText("author"));
        book.setPrice(Integer.valueOf(el.element("price").getText()));
        break;
    }
}

3.3 XPath 检索技术

总是使用整个XML文档,即从头到尾依次遍历解析,性能是非常低下的

xml中的属性赋值 java_java注解属性赋值_java 反射为属性赋值

而 XPath 则提供了 XML文档内检索的能力,能够根据条件在XML里面查找需要的内容、元素、节点。

步骤:

方法名说明

selectNodes(“表达式”):List< Node > or List < Element >

获得符合“表达式”的所有元素集合

selelctSingleNode(“表达式”):Node or Element(需要强转)

获得符合“表达式”的唯一元素

3.3.1 检索方案

绝对路径:selectNodes(“/根元素/子元素/孙元素/…”)

相对路径:selectNodes(“./子元素/…”)

全文检索:

属性检索: