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)


相关推荐

  • 区块链P2P网络协议演进过程[通俗易懂]

    区块链P2P网络协议演进过程[通俗易懂]区块链是以加密机制、储存机制、共识机制等多种技术组成的分布式系统,可以在无中心服务器的情况下实现相互信任的点对点交易功能。区块链最大的特点是去中心化和分布式,区块链共识机制使得参与节点共同为系统提供服务,实现中心化系统中类似金融中介机构的功能。共识机制是网络大部分节点在约定时间段内对交易状态达成相同的确认,其中共识性通过工作量证明(POW)、权益证明(POS)、实用拜占庭容错(PBFT)等多种共识算法实现。而一致性则要求大部分节点在约定时间段内保持数据内容一致,从而利用共识算法实现共识。传统中心化网络系统需

  • R语言怎么绘图(一个r语言完整的命令有什么)

    使用系统:centos6.464bit在R语言中可以使用png()等函数生成图片,例如:png(“aa.png”)可以生成图片。但是如果你是通过shell远程连接到系统上,可能会碰到如下错误:>png(“aa.png”)错误于.External2(C_X11,paste(“png::”,filename,sep=””),g$width,:无法打开PNG设备此外:警告…

  • 各种门平面图画法_关于CAD各种门怎么画平面图就行?[通俗易懂]

    各种门平面图画法_关于CAD各种门怎么画平面图就行?[通俗易懂]回答:CAD怎么画钢琴平面图CAD怎么画出钢琴的平面图呢?很简单的,有需要的朋友动手试试吧。1、启动中望CAD软件,执行“矩形”命令(rec),绘制1575mmX230mm和1575X50mm的直角矩形。2、执行矩形命令和移动命令(M),绘制出如图所示图形。3、执行移动命令,按[F8]键打开“正交”模式,捕捉上一步绘制的矩形中点,将二部分直角矩形图形组合在一起。4、执行“矩形”命令(rec),绘制…

  • UML旅游管理系统「建议收藏」

    UML旅游管理系统「建议收藏」一、需求概述1.1项目概述随着人们的生活质量的逐步提高,外出旅游成为人们生活中不可或缺的一项活动。开发一个旅游管理系统可以为大家提供便捷的途径。系统管理员可以发布和管理旅行路线。旅客可以查询路线,预定路线。1.2用户需求分析分析的系统的参与者有系统管理员、会员、普通用户三个群体。分别对三个群体的需求进行具体分析。系统管理员:管理员作为系统的管理者。需要对线路的数据库进行管理。比如发布新的线路,对不需要的线路进行删除、修改线路的具体信息。对于已经发布的线路,系统管理员可以查看预定的情况。同

  • mariadb安装教程linux,在Ubuntu 18.04系统上安装MariaDB 10.4的步骤「建议收藏」

    mariadb安装教程linux,在Ubuntu 18.04系统上安装MariaDB 10.4的步骤「建议收藏」以下介绍在Ubuntu18.04系统上安装MariaDB10.4,也适用在Ubuntu16.04系统上,我们可以从APT存储库在Ubuntu上安装MariaDB10.4。MariaDB是MySQL的直接替代品,具有更多功能,新存储引擎和更好的性能。在写本文时,MariaDB10.4可在Beta版本中使用了,如果你想使用正式版本,就用MariaDB10.3。相关链接在Ubuntu18….

  • 一切都不是为了营销手段的目的都是耍流氓

    一切都不是为了营销手段的目的都是耍流氓

发表回复

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

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