jdom 如何追加元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdom 如何追加元素相关的知识,希望对你有一定的参考价值。

jdom下用addContent添加元素会覆盖原有的元素 如何追加元素啊 急求!!!!!1

你好,这个问题正好在我的毕业设计中也出现了,通过请教高手,总算解决了。我下面的程序就是在web,xml文件中添加元素(其实就是添加servlet的配置)。如果你学了web的话,应该明白我下面的代码是干什么。
import java.io.File;
import java.io.FileOutputStream;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
/**向web.xml中增加Servlet配置
*
* @author liujia
*/
public class DomUtil

public static void add(String tableName) throws Exception
String className = DBUtil.tabNameToClsName(tableName) + "Servlet" ;
PropertyUtil prop = PropertyUtil.newInstance("db","d:/netbeans/graduationProject_update/src/java",2) ;
String servletPackage = prop.getMsg("servletPackage") ;

String fileName = "d:/netbeans/graduationProject_update/web/WEB-INF/web.xml" ;
File f = new File(fileName) ;
SAXBuilder builder = new SAXBuilder() ;
Document doc = builder.build(f) ;
Element root = doc.getRootElement() ;
System.out.println("root: " + root.getName());
Element servlet = new Element("servlet") ;
Element servletMapping = new Element("servlet-mapping") ;
Element servletName1 = new Element("servlet-name") ;

Element servletName2 = new Element("servlet-name") ;
Element servletClass = new Element("servlet-class") ;
Element urlPattern = new Element("url-pattern") ;

servletClass.setText(servletPackage + "." + className) ;
servletName1.setText(className) ;
servletName2.setText(className) ;
urlPattern.setText("/" + className) ;

Namespace ns1 = Namespace.getNamespace("http://java.sun.com/xml/ns/javaee");
servlet.setNamespace(ns1);
servletMapping.setNamespace(ns1) ;
servletName1.setNamespace(ns1) ;
servletName2.setNamespace(ns1) ;
servletClass.setNamespace(ns1) ;
urlPattern.setNamespace(ns1) ;

servlet.addContent(servletName1) ;
servlet.addContent(servletClass) ;
servletMapping.addContent(servletName2) ;
servletMapping.addContent(urlPattern) ;

root.addContent(servlet) ;
root.addContent(servletMapping) ;

XMLOutputter out = new XMLOutputter() ;
Format format = Format.getCompactFormat() ;
format.setEncoding("UTF-8") ;
format.setIndent(" ") ;
out.setFormat(format) ;
out.output(doc, new FileOutputStream(new File(fileName))) ;


追问

大概能看懂点儿····不过我说的问题的解决代码是在哪里?是用两次addContent方法吗?

追答

关键点就在那个namespace上。

追问

已经好用了,非常感谢!Namespace这个类有什么作用啊 网上搜了半天没有介绍

追答

我也具体没搞明白,如果没有的话,就会出现覆盖,而且会产生格式不正确的xml代码。
你先记住这个解决办法,体会了,吸收了就可以。

参考技术A 有没有先取得根节点?
如果xml文件是要创建的话,Document doc = new Document(元素对象); 来取得根节点
如果是读取文件的话,SAXBuilder sax = new SAXBuilder(); Document doc = sax.builder(文件路径); Element root = doc.getRootElement(); 来取得根节点
以上取得根节点后再添加元素,应该就没问题了。追问

根节点已经得到了,但是每次运行程序添加元素的时候只是覆盖了之前的元素没有追加元素

如何添加html元素的事件,有多少种方法

如题

参考技术A   添加html元素的事件有三种方法。

  1.通过HTML元素属性。简单说来就是在html结构中,给你要添加事件的元素添加一个属性。
属性名为 'on' + 事件名。
如:你要给a元素绑定一个click事件,你就该这么写:
<a href="http://blog.163.com/luping_01/blog/#" onclick='do something'>name</a>

2.通过对象属性。
对象指的是jDOM树里的对象,我们都知道,所有的html元素在DOM(文档对象类型)里都存在一个相应的DOM元素。
给这个DOM元素添加事件等同于方式一。这个属性名也一样:
也为 on + 事件名
如:
html结构:
<a href="http://blog.163.com/luping_01/blog/#" id="n">name</a>
js:

document.getElementById('n').onclick = function() //do something

3.通过W3C监听方式(标准方式)或者IE专属的中间模型添加事件

W3C方式: elemennt.addEventListener(事件名,处理函数引用,true || false)
这里的事件名就是单纯的事件名,不需要加 on ,true表示在事件传播阶段捕获事件,false表示在事件冒泡阶段捕获事件,一般我们设为false!

IE模式: element.attachEvent( 'on' + 事件名,处理函数引用);
注意,IE模式需要加on
参考技术B HTML的元素的事件就只用控件的自带的那么几个..比如onclick,onmouserdown,...等等都是调用脚本执行...
方法我知道就3种:1.在空间上写直接激发事件.
2:在页面加载的时候就调用脚本激发控件的某个事件..
3:在后台利用后台代码强行执行控件的事件.本回答被提问者采纳

以上是关于jdom 如何追加元素的主要内容,如果未能解决你的问题,请参考以下文章

JQuery如何向某个元素后面动态追加元素

jquery如何追加整个嵌套元素?

如何在Java中的ArrayList末尾追加元素?

JDOM 如何修改XML文档中的CDATA段数据

如何使用Jdom获取特定标记值

如何将具有 XML 格式内容的字符串转换为 JDom 文档