dom4j解析xml字符串步骤,dom4j解析xml生成对象

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: