Dom4j解析文档
1、Dom4j解析文档
特点:Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM开发的。与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
优点:Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
2、DOM4j中,获得Document对象的方式有三种:
1.读取XML文件,获得document对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
2.解析XML形式的文本,得到document对象.
String text = "<members></members>";
Document document = DocumentHelper.parseText(text);
3.主动创建document对象.
Document document = DocumentHelper.createDocument();
//创建根节点
Element root = document.addElement("members");
3、一下代码是dom4J对xml文档的增删改查
//遍历所有节点
public static void listNodes(Element elememt){
//org.dom4j.Element root = doc.getRootElement();
//返回的是一个迭代器,把根节点下的所有子字节的元素都获取到,并放到迭代器里
Iterator it = elememt.elementIterator();
while(it.hasNext()){
Element sun = (Element) it.next();
System.out.println("这是一个节点:"+sun.getName());
listNodes(sun);
}
}
//遍历属性节点
public static void listElementAttribute(Element element){
System.out.println(element.attributeCount());
for(Iterator it = element.attributeIterator();it.hasNext();){
Attribute att = (Attribute) it.next();//强制类型装换
System.out.println(att.getName()+" "+att.getText()+" "+att.getNodeTypeName());
}
}
//添加一个元素
public static void createElement(Document doc) throws Exception, FileNotFoundException{
//找到需要添加节点的位置,寻找根
Element root = doc.getRootElement();
Element parent = root.addElement("书");
//添加节点
Element element = parent.addElement("出版社");
element.addText("清华大学出版");///添加内容
element.addAttribute("级别", "一级出版社");//添加属性
//把内存中的语句写入到文档中
//构建字符输出流
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("src/Book.xml"),"utf-8");
XMLWriter xmlWriter = new XMLWriter();
xmlWriter.write(doc);
xmlWriter.close();
//writer.write(comment)
}
public static void deleteElement(Document doc) throws Exception, FileNotFoundException{
//找到需要添加节点的位置,寻找根
Element root = doc.getRootElement();
Element parent = root.addElement("书");
//删除节点
Element element = parent.element("作者");
parent.remove(element);
//修改元素节点的内容
Element price = parent.element("售价");
price.setText("50");
//删除某一个元素节点的属性
Element publish = parent.element("出版社");
Attribute att = publish.attribute("级别");
publish.remove(att);
//把内存中的语句写入到文档中
//构建字符输出流
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("src/Book.xml"),"utf-8");
XMLWriter xmlWriter = new XMLWriter();
xmlWriter.write(doc);
xmlWriter.close();
//writer.write(comment)
}
介绍Scheam
是一种用于定义和描述xml文档的模式文档(约束文档),遵循这个文档书学写的xml文档成为实例文档,他的出现是为了克服dtd的约束,他能支持更多的数据类型,并支持用户自定义新的数据类型,他有字符串类型,日期类型。
XML Schema 和 DTD的不同:
• XML Schema符合XML语法结构。
• DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
• XML Schema对名称空间支持得非常好。
• XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
• XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
• XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。
Scheam的了解:
l XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd。
l 一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。
l 和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema。
l 编写了一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。
Schema对命名空间是支持非常好的
名称空间是为了解除名称的冲突---------加上前缀------09级java:张三
名称空间的使用
Xml文档中标签
<h:姓名></h:姓名>
<f:姓名></f: 姓名>
Schema的约束能力非常大,,可记性对属性非常细致的操作
Schema约束的快速入门
Schema本身就是xml的文件,扩展名为xsd
Schema的文档通常成为模式文档,遵循这个文档书写的xml文档成为实例文档
Schema文档必须有一个根结点
Schema:book.xsd uri地址:把定义好的文档绑定到http://www.csdn..com网站上,是我们随便起的名字
Schema:book.xsd
Schema:book.xsd http://www.csdn..com 前缀为book
Xml文档
<book:书架></book:书架> 指定书架去遵循绑定的约束
book代表的是http://www.csdn..com