概述

Dom解析的文章已经烂大街了。在这里,只举三个场景下如何编码的例子:

  • xml内有多个同名节点,获取这多个同名节点
  • 已获取到某个节点,生成这个节点的xml描述
  • 修改节点某属性的值

详细的讲解看官请自行百度。

dom4j包下载链接为:点击下载dom4j

获取多个同名节点

  • xml实例
    <model name="model" >
<operator name="kafkaInput">
<parameter name="inputTopicName" value="department1_tn1" />
</operator>
<operator name="addFielduuid">
<parameter name="parameter1" value="p1" />
</operator>
<operator name="kafkaOutput">
<parameter name="outTopicName" value="department1_tn1" />
</operator>
<connect from="kafkaInput.outport1" to="addFielduuid.inport1" />
<connect from="addFielduuid.outport1" to="kafkaOutput.inport1" />
<ouput path="/home" />
</model>
  • 如上xml实例中,model下有3个operator节点
  • 获取多个同名节点不仅需要dom4j包,还需要Jaxen包。
  • Jaxen包下载链接为:点击下载Jaxen
  • 获取这三个节点的代码为:
public static void parsingSameNameNode(String xmlPath) {
File file = new File(argsPath);
// 创建saxReader对象
SAXReader reader = new SAXReader();
// 通过read方法读取一个文件 转换成Document对象
Document document;
try {
document = reader.read(file);
List<Element> operators = document.selectNodes("/model/operator");
for(Element operator:operators){
//do something...
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
* 通过接口selectNodes(String arg0)
* 接口参数为:"/model/operator"。意思是:获取model节点下所有的operator节点。Element可以理解为节点的信息
* 注意解析前读取xml内容、构建Document实例的代码:
```java
File file = new File(argsPath);
// 创建saxReader对象
SAXReader reader = new SAXReader();
// 通过read方法读取一个文件 转换成Document对象
Document document;
try {
document = reader.read(file);
//do something...
} catch (DocumentException e) {
e.printStackTrace();
}
```

节点的xml描述

  • dom解析得到某节点,将节点转为String,即节点的xml描述。
  • 将节点转化为String格式,接口为asXML()。
  • 转换代码如下:
// 获取根节点元素对象
Element rootNode = document.getRootElement();
// 获取context节点所有文字内容
String context = rootNode.element("context").asXML();
  • 上面代码逻辑为:

    • 根据document拿到dom树的根节点rooNode
    • 获取rootNode节点下的context节点
    • 使用asXML()接口,将节点转化为String格式。

修改属性值

  • 有两种修改属性值的方法

    • 先获取到该属性,使用属性的接口setValue(),修改属性值
    • 先获取到该属性所在节点,使用接口setAttributeValue()修改属性值

使用属性的setValue()接口,修改属性值

  • 代码逻辑为:

    • 获取到该属性所在节点
    • 获取该节点的属性,即要修改值的属性
    • 属性对象调用接口setValue(),接口参数为:属性值
    • 例上面xml中,output节点的path属性值修改为:/home/BYRans,代码如下:
Element rootNode = document.getRootElement();
Element node = rootNode.element("/model/output");
Attribute path = node.attribute("path");
path.setValue("/home/BYRans");

使用节点的setAttributeValue接口,修改属性值

  • 代码逻辑为:

    • 获取到该属性所在节点
    • 节点对象调用接口使用节点的setAttributeValue(),接口参数为:属性名和属性值
    • 注意此接口已不推荐使用,setAttributeValue()
    • 例上面xml中,output节点的path属性值修改为:/home/BYRans,代码如下:
Element rootNode = document.getRootElement();
Element node = rootNode.element("/model/output");
node.setAttributeValue("path","/home/BYRans");

Java Dom解析的三个实例的更多相关文章

  1. org.w3c.dom(java dom)解析XML文档

    位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析 ...

  2. 精讲 org.w3c.dom(java dom)解析XML文档

    org.w3c.dom(java dom)解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会 ...

  3. java基础解析系列(三)---HashMap

    java基础解析系列(三)---HashMap java基础解析系列 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...

  4. Java Dom解析xml

    Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,下面结合这个xml文件来进行dom解析. <?xml version="1.0&q ...

  5. 关于java dom解析的问题

    如下的xml代码: <persons> <person> <name>小强</name> <sex>male</sex> < ...

  6. Java DOM解析器 - 解析XML文档

    使用DOM的步骤 以下是在使用DOM解析器解析文档使用的步骤. 导入XML相关的软件包. 创建DocumentBuilder 从文件或流创建一个文档 提取根元素 检查属性 检查子元素 导入XML相关的 ...

  7. Java DOM解析器

    文档对象模型是万维网联盟(W3C)的官方推荐.它定义了一个接口,使程序能够访问和更新样式,结构和XML文档的内容.支持DOM实现该接口的XML解析器. 何时使用? 在以下几种情况时,应该使用DOM解析 ...

  8. 尚学堂java答案解析 第三章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题 1.A 2.BD 解析:switch的的判断表达式的数据类型:byte  short   int  ch ...

  9. Java DOM解析器 - 修改XML文档

    这是我们需要修改的输入XML文件: 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="UTF-8&q ...

随机推荐

  1. POJ 1061 青蛙的约会 扩展欧几里得

    扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...

  2. 【Effective Java】11、同步访问共享的可变数据

    这段时间看的部分感觉没啥需要记录下来的,个人也没什么想法,不过以后还是要多记,多写 package cn.xf.cp.ch02.item66; import java.util.concurrent. ...

  3. 高效 Java Web 开发框架 JessMA v3.3.1 正式发布

    JessMA(原名:Portal-Basic)是一套功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hib ...

  4. Gulp-前端进阶A-1

    毕业到转行以来有一年时间了,成为一名程序猿也有大半年了,之前在新浪上随便写写简单的学习过程,感觉不够像那么回事,现在接触前端也有一段时间了,也做过几个项目,认识到可以拓展的实在太多了,希望从这里起步, ...

  5. 来自 Codrops 的7种创新的拖放交互界面

    Codrops 分享了一些界面拖放的交互设计想法.基本的思路是在拖动一个项目的时候,为特定的操作呈现出可投掷的区域.这节省了大量的界面空间 ,并给出了一个有趣的动态的互动.有很多应用场景,例如分类和组 ...

  6. Koala – 开源的前端预处理器语言图形编译工具

    koala 是一个前端预处理器语言图形编译工具,支持 Less.Sass.Compass.CoffeeScript,帮助 Web 开发者更高效地使用它们进行开发.跨平台运行,完美兼容 Windows. ...

  7. 【HTML5】Canvas图像

    把一幅图像放置到画布上, 使用以下方法: drawImage(Img,x,y); 注:这里的Img必须是一个图像对象.   显示一个canvas图像: <!DOCTYPE html> &l ...

  8. sizzle源码分析 (3)sizzle 不能快速匹配时 选择器流程

    如果快速匹配不成功,则会进入sizzle自己的解析顺序,主要流程如下: 总结流程如下: (1)函数sizzle是sizzle的入口,如果能querySelectAll快速匹配,则返回结果 (2)函数S ...

  9. 移动Web开发的bug及解决方案

    我目前移动Web开发遇到的bug以及解决方案(慢慢补充当中). 1.android4.0以上一部分手机的webview中,当canvas小于屏幕大小时,绘图时会出现重影,就是说一个图只绘制了一遍,却出 ...

  10. ssh框架搭建的基本步骤(以及各部分作用)

    ssh框架搭建的基本步骤(以及各部分作用)     一.首先,明确spring,struts,hibernate在环境中各自的作用.   struts: 用来响应用户的action,对应到相应的类进行 ...