JAVA 基于dom4j创建XML文档

来源:互联网 发布:linux下硬盘启动时 编辑:程序博客网 时间:2024/05/16 10:13

原文地址:http://ling1123fang418.blog.163.com/blog/static/59204099201092710327379/  

感谢:小铃铛同学!



创建xml文档的两种方法

1、DocumentHelper类的createDocument()方法

DocumentHelper document=DocumentHelper.createDocument();

2、DoucumentFactory也可以创建xml文档

DocumentFactory documentfactory=DocumentFactory.getInstence();

Document document=documentfactory.createDocument();

为xml文件创建节点

为xml文件创建根节点,首先创建普通节点,然后调用setRootElement()方法把该节点设置为根节点,创建普通节点可以通过DocumentHelper的createElement();方法来创建

createElement方法的原型为

public static Element createElement(String name)//name为节点的名字

setRootElement方法的原型为

public void setRootElement(Element rootElement)

如下为创建一个根节点

DocumentHelper document=DocumentHelper.createDocument();

Element sml=DocumentHelper.createElement("sml");

document.setRootElement(sml);

为创建的xml文件填加注释应用Element对象的addComment()方法

如为上边创建的sml根节点填加注释:sml.addComment("这是根节点");

addComment方法的原型为

public Element addComment(String comment)//comment为注释内容

为指定的节点填加属性

应用dom4j组件的Element对象的addAttribute()方法

原型为

public Element addAttribute(String name,String value)

如为sml根节点填加属性

sml.addAttribute("version","2.0");

创建子节点应用Element对象的addElement方法

原型为public Element addElement(String name)//name为子节点的名称

如为sml创建子节点

Element whh=sml.addElement("whh");

设置子节点的内容,有两种方法

将普通文本作为节点内容

Element 的setText(在org.dom4j.Node接口中继承的)方法

方法原型为public void setText(String text)

如设置子节点whh的内容为公告栏

whh.setText("公告栏")

将CDATA段作为节点内容

应用Element 对象的addCDATA方法

原型为public Element addCDATA(String cdata)

设置子节点whh的内容为CDATA段

whh.addCDTAT("童年的梦想!");

为创建的xml文档设置编码

dom4j的OutputFormat类(在org.dom4j.io包中)的setEncoding方法来设置

方法原型为public void setEncoding(String encoding)

创建的xml文档默认的编码为utf-8也可以设成其他编码

例如写入的编码为GBK

OutputFormat  format=new OutputFormat();

format.setEncoding("GBK");//设置写入流编码为GBK

应用这段代码后,将在生成的xml文档声明中,将编码设置为GBK

<?xml version="1.0" encoding="GBK">

设置xml文档的输出格式

默认生成的xml文档为紧凑排版,这种格式比较混乱,dom4j提供了将输出格式设置为缩进方式 dom4j的OutputFormat类的createPrettyPrint()(无入口参数)来设置

方法原型为:public static OutputFormat createPrettyPrint();

OutputFormat format=OutputFormat.createPrettyPrint();//格式化为缩进方式

输出xml文件,有两方式

*未设置输出格式

XMLWriter类的构造方法XMLWriter(Writer writer)实例化一个XMLWriter对象再应用该对象的write方法写入数据,再关闭XMLWriter对象

如将XML文档对象document写入到XML文件中

String fileURL=request.getRealPath("/xml/placard.xml");

XMLWriter writer=new XMLWriter(new FileWriter(fileURL));

writer.write(document);

writer.close();

*设置了输出格式

XMLWriter类的构造方法XMLWriter(Writer writer,OutputFormat format)实例化一个对象,然后再用write方法写入数据,最后关闭XMLWriter类

如OutputFormat format=new OutputFormat()

format.setEncoding("GBK");

String fileURL=request.getRealPath("/xml/placard.xml");

XMLWriter writer=new XMLWriter(new FileWriter(fileURL),format);

writer.write(document);

writer.close();

解析XML

创建SAXReader对象,然后用该对象的read()方法获得要解析的XML对象

SAXReader对象的read()方法原型为

public Document read(File file)throws DocumentException

如String fileURL=request.getRealPath("/xml/placard.xml");

SAXReader reader=new SAXReader();

Document document=reader.read(new File(fileURL));

获取根节点

dom4j组件document对象的getRootElement()方法可以返回指定XML文件的根节点getRootElement()方法原型为

public Element getRootElement()没有入口参数

获取XML文档对象document根节点的方法如下

Element placard=document.getRootElement()

获取子节点 通过Element对象 的element()或elements()方法实现

element()用于获取指定名称的第一个节点,该方法用于获取根节点中节点名唯一的一个子节点

方法原型为public Element element(String name)

elements()用于获取指定名称的全部节点,该方法用于获取根节点中多个并列的具有相同名称的子节点

方法原型为public List elements(String name)

修改XML

在修改XML文档前,首先需要查询该节点,用Element对象的selectSingleNode()或selectNodes()方法实现

selectSingleNode()方法用于获取指定条件的唯一节点

该方法的原型为public Node selectSingleNode(String xpathException)

xpathException:XPath表达式,XPath使用“/”隔开节点树中父子节点,从而构成代表节点位置的路径

如果XPath以“/”开头,则表示使用的是绝对路径,否则表示使用的是相对路径,如果使用属性,那么在属性前@符号,另外,在XPath表达式中,也可以使用谓词,例如下面的表达式应用selectSingleNode的方法获取XML文档的根节点placard的ID属性值等于1的info节点

org.dom4j.Node item=placard.selectSingleNode("/placard/info[@id='1']");

selectNodes()方法可以获取指定条件的节点列表,方法原型为

public List selectNodes(String xpathException)

selectNodes()方法获取XML文档的根节点placard的子节点info代码如下

List list=placard.selectNodes("/placard/info");

删除节点,同样要查找工删除的节点 可以 应用Element的selectSingleNode()或selectNodes()获取到要删 除的节点后就可以用Element的remove()方法删除该节点

public boolean remove(Element element)

例如要删除XML文档的根节点placard的ID属性为1的子节点info的代码如下

Element item=(Element)placard.selectSingleNode("/placard/info[@id='1']");

if(null!=item){

placard.remove(item);

}

批量删除指定子节点document.getRootElement().elements("info").clear();

0 0
原创粉丝点击