dom4j解析xml字符串步骤,dom4j解析xml生成对象
1.XML解析方法介绍日常开发中常见的XML解析方法有两种:
1.DOM解析DOM解析需要解析器将整个XML文件加载到内存中,并生成一个文档对象。
1.优点:保留了元素之间的结构和关系,可以添加、删除和检查元素。
2.缺点:如果XML文件太大,可能会导致内存溢出。
2.SAX解析SAX解析是一种更高效的解析方法。它逐行扫描,扫描解析,以时间驱动的方式解析,每解析一行都会触发一个事件。
1.优点:不会有内存溢出问题,可以处理大文件。
2.缺点:只会读,不会写。
3.解析XML的常用类库解析器根据不同的解析方法提供了具体的实现。为了方便开发者解析XML,有一些易于操作的类库。如下所示:
1.dom4j:相对简单的XML解析类库;
2.Jsoup:一个强大的用于DOM解析的类库,尤其是用于HTML解析,所以你可以使用Jsoup来抓取网页的数据。
2.用dom4j 1解析XML1。创建一个普通的Maven项目,打开IDEA编译器,在导航栏中选择文件,点击New,然后选择项目。点击后,出现如图所示的界面:
选择一个普通的Maven项目,直接点击下一步。接下来,自定义项目的名称、位置和工作坐标。如下所示:
点击后,IDEA开始加载项目。
2.导入dom4j的依赖项。在加载的项目下,找到pom.xml文件并将依赖项导入其中。具体的依赖关系如下:
属国
属国
groupId org.dom4j /groupId
artifactId dom4j /artifactId
版本2 . 1 . 1/版本
/依赖关系
/依赖关系3。使用dom4j解析user.xml。使用dom4j解析user.xml的步骤如下:
在项目的资源目录中创建一个user.xml文件;
在下面的user.xml文件中,users是根标签,它是全局唯一的;
根标签下有两个用户子标签,每个用户子标签有两个属性,一个是国家,一个是来源;用户标签下还有三个子标签,即id、名称和密码标签,如下所示:
1.编写user.xml文件?xml版本=1.0 编码=UTF-8 ?
!-文件声明
XML文档声明是可选的,就是你可以写,但是日常生活开发大家都会写。
如果编写XML文档声明,它必须放在XML文档的第一行和第一列,并且必须以?Xml以?结束,并且必须包含两个属性。
一个是version,表示XML的版本。
一个是编码,代表XML的编码。
-
!-
是元素XML的重要组成部分,元素也称为标记。
每个XML文件都必须有一个根标签。
标签由开始标签和结束标签组成,可以写成标签或文本字符串。
标签可以嵌套,但不能随便嵌套。
标签必须符合命名规则和命名约定。
-
!-
它是属性标签的一部分。属性只能在开始标记中定义,不能在结束标记中定义。
属性定义的格式:属性名=属性值,需要用“”括起来
在开始标记中可以定义多个属性,但是多个属性的属性名不能相同。
属性的名称必须遵循命名规则和约定。
-
用户
用户id=10001 国家=中国来源=Android
id 10001 /id
名称管理员/名称
密码111111/密码
/用户
用户id=10002 国家=中国来源=ios
id 10002 /id
姓名托尼/姓名
密码666666/密码
/用户
/用户2。创建解析器对象//创建解析器对象
SAXReader SAXReader=new SAXReader();3.使用解析器对象读取XML文档以生成文档对象。//根据user.xml文档生成文档对象
document document=saxreader . read(DOM 4 jparseuserxmltest . class . getclass loader()。get resource( users . XML );4.根据文档对象获取XML的元素(标签)信息。Dom4j常用API描述:
具体Dom4j解析的具体测试代码如下:
导入org . dom4j . document;
导入org . dom4j . document exception;
导入org . dom4j . element;
导入org . dom4j . io . sax reader;
导入Java。util。列表;
公共类Dom4jParseUserXmlTest {
公共静态void main(String[] args) {
//创建解析器对象
SAXReader SAXReader=new SAXReader();
尝试{
document文档=saxreader。read(DOM 4 jparseuserxmltest。班级。getclass loader().获取资源(用户。XML’);
元素根元素=文档。getrootelement();
System.out.println(1 .- users.xml文件的根节点的名字是:根元素。getname());
System.out.println(2 .-获取根标签用户的子标签列表);
列表元素usersubelementlist=根元素。elements();
对于(元素用户元素:用户标签列表){
用户标签的子标签的名字是使用元素。getname());
用户标签的子标签的编号属性值是用户元素。属性值(“id”);
用户标签的子标签的国家属性值是用户元素。属性值(“国家”);
System.out.println(3 .-获取用户的子标签列表);
列表元素userSubElementList=用户元素。elements();
for(Element userSubElement:userSubElementList){
System.out.println(user标签下的子标签名为: usersubelement。getname());
System.out.println(user标签下的子标签文本是: usersubelement。gettext());
}
}
//获取用户标签的第一个用户标签
元素第一个用户元素=根元素。元素(“用户”);
//第一个用户标签的子标签密码的文本内容
字符串密码=第一个用户元素。属性值(“密码”);
System.out.println(密码);
} catch (DocumentException e) {
e。printstacktrace();
}
}
}3.dom4j结合路径语言解析XML1 .Dom4j集成路径语言在pom.xml导入路径语言对应的依赖即可,具体如下所示:
属国
groupId jaxen /groupId
jaxen /artifactId
版本1 .2 .0/版本
/依赖关系2。Dom4j提供基于路径语言的应用程序接口方法
操作
node selectSingleNode(字符串XPath表达式);
根据路径语言表达式获取单个标签(元素/节点)
列表节点选择节点(字符串路径语言表达式)
根据路径语言表达式获取多个标签(元素/节点)
3.路径语言的语法绝对路径表示方式:以/开头的路径表示绝对路径,绝对路径是从根元素开始写。例如/元素/子元素/子子元素……;
相对路径的表达方式:相对于当前节点的元素继续查找的节点,不以/开头,…/表示上一个元素,/表示当前元素;
全文搜索路径方式:例如//子元素,//子元素//子子元素,//子元素/子子元素。
注意://表示无论中间有多少层,直接获取所有子元素所有满足条件的元素
/表示只找一层
谓语(条件筛选形式)例如: //元素[@attr1=value]
具体对应的每一种方式的爪哇测试程序如下所示:
导入org。dom4j。文档;
导入org。dom4j。文档异常;
导入org。dom4j。元素;
导入org。dom4j。节点;
导入org。dom4j。io。sax阅读器;
导入Java。util。列表;
公共类Dom4jXPathParseUserXmlTest {
公共静态void main(String[] args) {
SAXReader SAXReader=new SAXReader();
尝试{
document文档=saxreader。read(DOM 4 jxpathparseuserxmltest。班级。getclass loader().获取资源(用户。XML’);
//拿到第一个用户的密码
System.out.println(1 .-使用绝对路径方式来查找元素);
Element元素=(元素)文档。selectsinglenode(/users/user/password );
字符串密码=元素。gettext();
System.out.println(密码);
System.out.println(2 .-使用相对路径查找元素);
//元素是当前获取的密码元素
元素名=(Element)元素。selectsinglenode(./name’);
System.out.println(第一个用户的姓名为姓名。gettext());
System.out.println(3 .-使用全局搜索的方式);
//获取所有的编号元素的文本
列表节点id节点列表=文档。选择节点(//id );
for (Node node : idNodeList) {
元素idElement=(元素)节点;
系统。出去。println(id元素。gettext());
}
System.out.println(4 .-谓语形式);
//获取id=10002的用户信息
元素id元素=(元素)文档。selectsinglenode(//user[@ id= 10002 ]);
列表元素元素=id元素。elements();
for (Element element1 : elements) {
系统。出去。println(元素1。getname()=元素1。gettext());
}
} catch (DocumentException e) {
e。printstacktrace();
}
}
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。