创建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();