`
lzth
  • 浏览: 142307 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DOM4J对XML文档的读写增删改等操作

    博客分类:
  • Java
阅读更多
用DOM4J对XML文档的读写增删改等操作,是我自己的练习题,没有整理和注释,只做以后查看之用。主要方法在构造函数中做了简单说明,涉及到的 XML、XSD、DTD文档不再写入。
package xml.dom4j.wkjava;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class Test {
	
	Document doc = null;

  public Test() throws DocumentException, IOException, SAXException {
      Document doc = loadXML("class.xml"); //载入XML文档
     System.out.println(doc.asXML());
		
      printDoc(doc); //打印XML文档
		
     storeDoc(doc,"new.xml"); //把XML文档存入硬盘
				
     doc = valideDoc("class.xml");  //校验dtd XML文档
     printDoc(doc);
		
     doc = validateDocBySxd("classSchema.xml"); //校验Schema文档
     printDoc(doc);
		
     String url = getClass().getResource("/xml/dom4j/wkjava/class.xsd").toString();
     doc = validateDocBySxd("classSchema.xml",url); //校验Schema文档(俩参数)
     printDoc(doc);
		
     doc = createDoc(); //创建Schema文档
    storeDoc(doc,"root.xml");
		
     doc = validateDocBySxd("classSchema.xml");
     updateZip(doc,"102202"); //在文档中修改原属
    printDoc(doc);
		
     doc = validateDocBySxd("classSchema.xml");
     printNames(doc);  //打印文档中所有学生名字
    System.out.println(getStudentCount(doc));
  }
	public static void main(String[] args) {
		try {
			new Test();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		}
	}

	public Document loadXML(String xmlfile)
	    throws FileNotFoundException, DocumentException{
	    SAXReader reader = new SAXReader();
	    doc = reader.read(new FileInputStream(xmlfile));
	    return doc;
	}
	
    public void printDoc(Document doc) throws IOException {
    	Writer out = new OutputStreamWriter(System.out,"gb2312");
	    OutputFormat format = OutputFormat.createPrettyPrint();
	    XMLWriter writer = new XMLWriter(out, format);
	    writer.write(this.doc);
	    out.flush();
	 }
    
    public void storeDoc(Document doc,String filename) throws IOException {
    	Writer out = new OutputStreamWriter(new FileOutputStream(filename),"utf-8");
	    OutputFormat format = OutputFormat.createPrettyPrint();
	    XMLWriter writer = new XMLWriter(out, format);
	    writer.write(this.doc);
	    printDoc(doc);
	    out.close();
	 }

    public Document valideDoc(String xmlfile) throws DocumentException, IOException{
    	EntityResolver resolver = new EntityResolver(){
			public InputSource resolveEntity(String publicId, String systemId)
			    throws SAXException, IOException {
				if(publicId.equals("//class from weiking")){
					InputStream in = new FileInputStream("class.dtd");
					return new InputSource(in);
				}
				return null;
			}   		
    	};
    	SAXReader reader = new SAXReader(true);
    	reader.setEntityResolver(resolver);
    	Document doc = reader.read(new FileInputStream(xmlfile));
    	return doc;
    }
    
    public Document validateDocBySxd(String xmlfile) throws SAXException, DocumentException, IOException{
    	SAXReader reader = new SAXReader(true);
    	reader.setFeature("http://apache.org/xml/features/validation/schema",true);
    	Document doc = reader.read(new FileInputStream(xmlfile));
    	return doc;
    }
    
    public Document validateDocBySxd(String xmlfile,String SchemaUrl)
        throws SAXException, FileNotFoundException, DocumentException{
    	SAXReader reader = new SAXReader(true);
    	reader.setFeature("http://xml.org/sax/features/validation", true);
		reader.setFeature("http://apache.org/xml/features/validation/schema",true);
		reader.setFeature("http://apache.org/xml/features/validation/schema-full-checking",true);
		reader.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",SchemaUrl);
    	Document doc = reader.read(new FileInputStream(xmlfile));
    	return doc;
    }
    
    public Document createDoc() {
        Document doc = DocumentHelper.createDocument();
        Element root = doc.addElement( "root" );

        Element author2 = root.addElement( "author" )
          .addAttribute( "name", "Toby" )
          .addAttribute( "location", "Germany" )
          .addText( "Tobias Rademacher" );

        Element author1 = root.addElement( "author" )
          .addAttribute( "name", "James" )
          .addAttribute( "location", "UK" )
          .addText( "James Strachan" );

        return doc;
      }

    public void updateZip(Document doc,String zip){
    	String xpath = "/Class/Teacher/zip";
    	Element e = (Element)doc.selectSingleNode(xpath);
    	e.setText(zip);
    }
    
    public void printNames(Document doc){
    	String xpath = "/Class/Students/Student/name";
    	List list = doc.selectNodes(xpath);
    	for(Iterator i = list.iterator(); i.hasNext();){
    		Element e = (Element)i.next();
    		System.out.println(e.element("last").getText() + e.valueOf("first"));
    	}
    }
    
    public int getStudentCount(Document doc){
    	int count = 0;
    	String xpath ="count(/Class/Students/Student)";
    	count = doc.numberValueOf(xpath).intValue();
//    	String value = doc.valueOf(xpath);
//    	count = Integer.parseInt(value);
    	return count;

分享到:
评论

相关推荐

    用dom4j对xml进行增删改查操作参考资料

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的API,使得在Java中对XML进行增删改查变得容易。本文将详细介绍如何使用DOM4J进行XML的操作。 首先,我们需要理解XML的基本概念。XML(可扩展...

    javascript 对xml文件的增删改

    总之,JavaScript提供了丰富的API来操作XML,这使得在前端实现对XML文件的增删改查成为可能。然而,由于跨域限制,直接在浏览器环境中读写本地文件可能需要借助Web存储、File API或服务器端支持。了解并熟练运用这些...

    Java操作xml文件,对xml文件的增、删、改、查,简单的web应用

    - DOM解析器将XML文件解析为一个树形结构,通过`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`等类创建和操作DOM树。例如,我们可以使用`getElementsByTagName`、`getAttribute`等方法进行...

    基于ASP的XML文章系统 v1.13 (xml存储数据增删改操作).zip

    在"基于ASP的XML文章系统 v1.13 (xml存储数据增删改操作)"中,ASP被用来处理用户交互和后台数据管理,而XML则作为数据存储和交换的主要格式。 XML(Extensible Markup Language)是一种标记语言,用于存储结构化...

    dom4j-1.6.1.jar jaxen-1.1-beta-6.jar

    3. 修改XML:通过API可以直接对XML文档进行增删改操作。 4. XPath查询:支持XPath表达式,能快速定位到XML文档中的任意节点。 JAXEN,全称“Java eXtensible Expression Language”,是一个独立于XML解析器的XPath...

    ASP实例开发源码—ASP+XML文章系统 v1.13 (xml存储数据增删改操作).zip

    ASP中的XML DOM对象模型提供了访问和操作XML文档的方法,如`CreateNode`用于创建新的XML节点,`getElementsByTagName`用于查找特定标签的元素,`innerHTML`用于获取或设置元素的内容,以及`load`和`save`方法用于...

    ASP源码—XML文章系统 v1.13 (xml存储数据增删改操作).zip

    在后台,ASP代码会创建一个新的XML节点,包含文章的标题、内容、作者等信息,并将其插入到XML文件中。 2. 数据删除:删除操作涉及从XML文件中移除特定的文章节点。ASP代码需要找到对应的节点并使用DOM操作来删除它...

    java xml增删改查多种方法

    - DOM:将整个XML文件加载到内存中形成一个树形结构,便于遍历和操作,但对大型XML文档内存消耗大。 - SAX:事件驱动模型,只读,逐行解析,适用于处理大文件,内存占用少。 - StAX:也是一个流式API,允许向前...

    Word文档转xml

    这可能涉及到对原始XML节点的增删改,例如去除特定格式信息,或者将特定样式转换为自定义的XML标签。 4. **生成新的XML文件**:将处理后的数据写入一个新的XML文件。Java的DOM(Document Object Model)或StAX...

    C#操作Xml文件.rar_CSahrpForXml

    例如,你可以使用Load方法加载XML文件,然后通过SelectNodes或SelectSingleNode方法查询XML节点,再用RemoveChild、AppendChild等方法进行增删改操作。 其次,XPath和LINQ to XML是C#中处理XML的两种高效方式。...

    MSXML 操作XML文件

    例如,创建一个`IXMLDOMDocument`对象,使用`load`方法加载XML文件,然后通过`selectSingleNode`或`selectNodes`方法查询节点,最后使用`appendChild`、`removeChild`等方法对节点进行增删改。 2. SAX解析:SAX是一...

    一个检查ZIP格式增量包的小工具

    标题中的“一个检查ZIP格式增量包的小工具”指的是一个专门用于检查ZIP压缩文件的软件或程序,它可能具有检测ZIP包内文件的增删改情况、校验完整性、分析内容等特性。这样的工具对于开发者或者系统管理员来说非常...

    jdom教程+实例(含源代码)

    4. **修改XML**:可以直接对`Element`、`Attribute`进行增删改操作,然后通过`OutputFormat`和`XMLOutputter`输出到文件。 5. **序列化和反序列化**:将`Document`对象转换为XML字符串或反之,是JDOM的基本功能。 *...

    php开发培训最全学习大纲.docx

    8. 操作文件和目录:学习文件系统操作,如读写文件、创建删除目录等。 八、HTTP协议深度剖析 1. HTTP协议原理:理解HTTP请求和响应的工作流程。 2. 防盗链技术:防止资源被非法引用。 3. 302和304状态码:了解...

    黎活明android教程的全程PPT

    5> XML解析(SAX/DOM/PULL),写xml文件 6> SharedPreferences 第三天 1> SQLite数据库添删改查操作 A.创建数据库 B.SQLiteOpenHelper自动创建数据库的原理实现 C.数据库版本变化 D.编写代码完成添删改查操作(两...

    java开发实战1200例

    4. **IO流** (Chapter 23): 学习输入/输出流的概念,包括文件流、字符流、对象序列化,以及如何进行文件复制、读写等操作。 5. **网络编程** (Chapter 24): Java提供了Socket和ServerSocket类进行网络通信,章节...

    传智播客Android视频教程-课程源码.rar

    5> XML解析(SAX/DOM/PULL),写xml文件 6> SharedPreferences 第三天 1> SQLite数据库添删改查操作 A.创建数据库 B.SQLiteOpenHelper自动创建数据库的原理实现 C.数据库版本变化 D.编写代码完成添删改查操作...

    asp.net相册网站

    ASP.NET相册网站是一个利用...开发这样的网站需要对ASP.NET框架有深入理解,包括但不限于Web Forms、HTTP Handler、AJAX以及数据库操作等技能。同时,良好的用户体验设计和数据库优化也是构建高质量相册网站的关键。

    go web编程

    - **NoSQL 数据库类型**:键值对存储、文档存储等。 - **Go 客户端库**:针对 MongoDB、Redis 等数据库的支持。 - **应用场景**:大数据处理、实时分析等。 **5.7 小结** - **数据库选择**:根据项目需求合理选择...

    shortleft-Assistant:您的前排座位助手

    `document.getElementById()`、`querySelector()`和`querySelectorAll()`等方法用于选取元素,`innerHTML`、`innerText`和`textContent`用于读写元素内容,而`appendChild()`、`removeChild()`和`insertBefore()`则...

Global site tag (gtag.js) - Google Analytics