java-xml文件

java-xml文件使用DOM思想,读取xml文件介绍dom4j核心类1。SAXReaderDOM解析思想的核心类方法:read(绑定了这个xml文件的输入流)读取xml文件返回文档对象,返回值是Doucment对象2.Doucment对象方法:getRootElement()获取文档的根标签返回值:返回的是标签对象Element3.Element标签对象方法获取子标签Listelements()返回所有子标签集合List方法:StringattributeValues(String属性

大家好,又见面了,我是你们的朋友全栈君。

使用DOM思想,读取xml文件
介绍dom4j 核心类
1。SAXReader DOM解析思想的核心类
方法:read(绑定了这个xml文件的输入流) 读取xml文件
返回文档对象,返回值是Doucment对象
2. Doucment对象
方法:getRootElement()获取文档的根标签
返回值:返回的是标签对象Element
3.Element标签对象
方法获取子标签 List elements()
返回所有子标签集合List
方法:String attributeValues(String 属性名) 获取属性值
方法:String getText()获取当前元素的文本内容

xml文件为java工程的配置文件,这样提高了程序的扩展性。代码所需要的外界信息,可直接从xml文件中获取。这样只需要更新xml配置文件即可,不需要对代码进行更改。
再把产品交给客户的时候,并不是直接把写好的代码包拷贝给他,而是把生成的class文件连带着xml文件拷给客户(不会公开源码,客户直接拿到class文件加载到内存进行运行)。
所以xml文件要与源码放在src文件包下面,这样在java生成的out文件夹中,class与xml也放置在一起了。

package xml;
import java.io.InputStream;
public class DOMReaderXml { 

public static void main(String[] args) { 

//使用类加载器,获取输入流,绑定xml文件
InputStream inputStream = DOMReaderXml.class.getClassLoader().getResourceAsStream("beans.xml");
//核心类,对象
SAXReader saxreader = new SAXReader();
//对象sax的read()传递字节流
Doucment doucment = saxreader.read(inputStream);
//doucment对象的方法,获取根标签
Element rootElement = doucment.getRootElement();
//获取跟标签的两个子标签bean
List<Element> beanElements = rootElement.elements;
//先对集合进行判断,然后遍历
//集合不能是null,集合的长度为0
if(beanElements != null && beanElements.size()>0){ 

for(Element beanElement : beanElements){ 

//beanElement就是获取的子标签bean
//获取bean标签的属性id和className
String id = beanElement.attributeValue("id");
String className = beanElement.attributeValue("className");
System.out.println(id + "::" + classNmae);
//bean标签下还有2个子标签property
//beanElement bean标签的对象,获取它的子标签
List<Element> propertyElements = beanElement.elements();
if(propertyElements != null && propertyElements.size()>0){ 

for(Element propertyElement : propertyElements){ 

//propertyElement就是获取的bean的子标签property
//property标签的属性name和value
String name = propertyElement.attributeValue("name");
String value = propertyElement.attributeValue("value");
//property标签的文本
String text = propertyElement.getText();
System.out.println(name + "::" + value + "::" + text);
}
}
}
}
}
}

以上是读取所有的数据,但是我们想能够有效的抓取到真正想要的数据。
XPath能够瞬间定位xml里面我们想要的信息
原生的dom4j不支持XPath
因此采用jaxen-1.1.6.jar结合dom4j-1.6.1.jar使用就可以一起使用了。有效的减少了代码量。

package xml;
import java.io.InputStream;
/** * xpath表达式,快速精确定位xml * 不能单独使用,依靠dom4j(doucment) * * 表达式: * /AAA/DDD/BBB 表示一层一层的 AAA下面 DDD下面的BBB * //BBB 表示和这个名称相同,表示只要名称是BBB 就能得到 * /* 所有元素 * BBB[1] 表示第一个BBB元素 * BBB[last()] 表示最后一个BBB元素 * //BBB[@id] 表示只要BBB元素上面有id属性,就都得到 * //BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1 * * List<Node> selectNodes("xpath表达式") 用来获取多个节点 * Node selectSingleNode("xpath表达式") 用来获取一个节点 */
public class XPathReadXml { 

public static void main(String[] args) throws Exception{ 

//类的加载器,获取字节输入流
InputStream inputStream = XPathReadXml.class.getClassLoader().getResourceAsStream("student.xml");
//DOM4J的核心对象
SAXReader saxreader = new SAXReader();
//read()方法传递字节输入流,返回Doucment对象
Document doucment = saxreader.read(inputStream);
//获取根标签
Element rootElement = doucment.getRoorElement();
//获取age标签, student/age
List<Node> list = root.Element.selectNodes("/students/student/age");
//获取标签sex,xpath最常用的一种形式 //sex
//返回的是Node节点对象
//Node node = rootElement.selectSingleNode("//sex");
Element node = (Element)rootElement.selectSingleNode("//sex");
System.out.println(node.getText());
//获取标签是name,属性是id,有这个属性就行
List<Node> list = rootElement.selectNodes("//name[@id]");
//获取标签是name,属性是id,有这个属性必须是某个值
List<Node> list = rootElement.selectNodes("//name[@id='属性值']");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156769.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 10种不同画法画平行线怎么画_六边形有几种画法

    10种不同画法画平行线怎么画_六边形有几种画法。1.趋势线:趋势线分快速、中速、慢速,趋势的画法为:上升(下降)趋势线是以向上(下)走势中的低点(高点)与低点(高点)的连线。其中时间跨度越长所构成的支撑作用也越强,而趋势线与K线相交的点位越多,趋势线形成的支撑作用也越强。2.水平线:用前期低点画线,构成再度回落的支撑作用,或者前期低点在后期颇为下跌后再度上升将形成阻力作用。水平线有构成阻力和支撑作用。水平线的画法,一般是用K线实体高点或低点画…

  • 面试题 垃圾分类_前端垃圾回收机制面试题

    面试题 垃圾分类_前端垃圾回收机制面试题一、垃圾回收对象JVM运行时的数据区包括程序计数器、栈、堆、方法区、本地方法栈其中程序计数器、栈和本地方法栈是和线程绑定在一起的,当创建了线程,就会申请内存,当线程结束的时候,想关的内存就会被销毁。方法区主要是类对象,类加载的时候就会申请这里的内存,“类卸载”操作实际上是很少会涉及到的。因此,垃圾回收机制主要回收的对象就是堆,并且垃圾回收释放内存,实际上是在以对象为单位进行释放,因为内存的申请是以对象为单位进行申请的,当整个对象的内存都不在使用时,即没有引用指向这个对象时,就可以将其进行释放二、垃圾

    2022年10月13日
  • 2021MySql-8.0.26安装详细教程(保姆级)

    2021MySql-8.0.26安装详细教程(保姆级)MySql-8.0.26安装详细教程保姆级下载安装包安装配置配置环境变量下载安装包下载安装包:下载网址:https://dev.mysql.com/downloads/选择这个进入后选择直接下载第一个点击这里,开始下载安装配置解压安装包我这里解压到d盘打开编写MySQL配置文件在解压目录下新建my.ini文件将下面文本拷贝进my,ini文件中[mysqld]#设置3306端口port=3306#设置mysql的安装目录———-是你的文件路径-

  • es6拼接字符串有几种写法_es6字符串包含

    es6拼接字符串有几种写法_es6字符串包含ES6模板字符串 作用:简化字符串的拼接 语法:`字符串内容${变量}字符串内容`; “为波浪线那个键的符号代码示例:<htmlng-app=’app’ng-controller=’main’><head> <metacharset=”utf-8″> <metaname=’viewport’content=’widt…

  • 各种常用不等式汇总「建议收藏」

    各种常用不等式汇总「建议收藏」对数学中常用的不等式进行了汇总,目前只有结论,没有证明

  • JavaSE基础(32) 遍历数组的3种方式

    JavaSE基础(32) 遍历数组的3种方式第一种:for循环//遍历数组publicclassThroughTheArray{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub int[]arr={12,4,1,66,54,6,74,-3};//静态创建一个数组 for(inti=0;i<…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号