dom4j使用总结 —— 一些简单的例子

     最近做项目时要使用dom4j对xml进行解析、转换、验证等操作,在网上查了好多资料,最终终于成功地把项目写出来了,这里对xml解析部分使用到的dom4j知识进行总结,方便以后查阅。

1、第一个函数的功能是写一个xml文件:

public static boolean writeXml(String fileName){
	    boolean returnValue=false;  
	    //定义一个XML文档  
	    Document docement=DocumentHelper.createDocument();  
	    //设置XML文档的元素  
	    Element rootElement=docement.addElement("创建XML文档");  
	    rootElement.addComment("一个简单的实例");  
	    Element nameElement=rootElement.addElement("name");  
	    nameElement.addAttribute("属性","名字");  
	    Element cityElement=rootElement.addElement("city");  
	    cityElement.setText("南京");  
	    Element homeElement=cityElement.addElement("住址");  
	    homeElement.setText("学校宿舍");  
	    //创建XML文档   
	    try {  
	        // 格式化输出
	        OutputFormat format = OutputFormat.createPrettyPrint();  
	        // 指定XML编码
	        format.setEncoding("GB2312");  
	        XMLWriter writer=new XMLWriter(new FileWriter(new File(fileName)),format);   
	        writer.write(docement);  
	        writer.close();  
	        return returnValue=true;     
	    } catch (Exception e) {  
	        e.printStackTrace();  
	    } 
            return returnValue;  
	}

    

    生成的xml文件如下:


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

<创建XML文档>
  <!--一个简单的实例-->
  <name 属性="名字"/>
  <city>南京
    <住址>学校宿舍</住址>
  </city>
</创建XML文档>

    

    有的时候或许我们并不希望把字符串写入文件,而是希望直接返回一个字符串,只要简单地修改上面程序就可达到目标:


	public static String writeXml(String fileName){
	    //定义一个XML文档  
	    Document docement=DocumentHelper.createDocument();  
	    //设置XML文档的元素  
	    Element rootElement=docement.addElement("创建XML文档");  
	    rootElement.addComment("一个简单的实例");  
	    Element nameElement=rootElement.addElement("name");  
	    nameElement.addAttribute("属性","名字");  
	    Element cityElement=rootElement.addElement("city");  
	    cityElement.setText("南京");  
	    Element homeElement=cityElement.addElement("住址");  
	    homeElement.setText("学校宿舍");  
	    //设置字符编码,返回字符串
	    docement.setXMLEncoding("GB2312");
	    return docement.asXML();
	}

2、第二个函数的功能是读一个xml文件

    由于这次要解析的xml文件格式十分简单,形如:


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

<course>
  <!--一个简单的实例-->
  <tec>曹老师</tec>
  <plc>南京</plc>
  <name>Linux</name>
</course>

    

    所以解析xml的代码也十分简单,既没用到递归,也没用到枚举,代码如下:


	public static void readXML(String xmlUrl){
		Document doc = null;
	    try {
	    	//doc = DocumentHelper.parseText(xml); // 如果传入的字符串本身就是xml格式的,那么这条语句能够将字符串转为XML
	    	SAXReader reader = new SAXReader();
	    	doc = reader.read(new FileReader(new File(xmlUrl)));
	    	Element rootElt = doc.getRootElement(); // 获取根节点
	        System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称
	        System.out.println("tec:" + rootElt.elementTextTrim("tec"));
	        System.out.println("plc:" + rootElt.elementTextTrim("plc"));
	        System.out.println("name:" + rootElt.elementTextTrim("name"));
	    } catch (Exception e) {
	    	e.printStackTrace();
	        System.exit(1);
	    }
	}

3、验证xml文件是否符合xsd文件定义:

	public static boolean testXML(String xmlUrl, String schemaUrl){
		try{
			SAXReader reader = new SAXReader();
			reader.setValidation(true);
			reader.setFeature("http://xml.org/sax/features/validation", true);
			reader.setFeature("http://apache.org/xml/features/validation/schema", true);
                        //如果已经在xml文件中指定了xsd,这条语句可以没有
			reader.setProperty( "http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation", schemaUrl );
		             
			XMLErrorHandler errorHandler = new XMLErrorHandler();
			reader.setErrorHandler(errorHandler);
			reader.read(new FileReader(new File(xmlUrl)));
			//如果传入的第一个参数本身就是xml文件,请调用下面这条语句
			//reader.read(new StringReader(xmlString) );
			if (errorHandler.getErrors().hasContent()) {
				return false;
			} else {
				return true;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	} 

4、利用xslt转换xml文件

	/* 第一个参数是xml文件路径,第二个参数是xslt文件路径,返回的字符串表示转换后的xml文件 */
	public static String transferXML(String xmlURL, String xsltURL){
		try{
			SAXReader reader = new SAXReader();
			Document document = reader.read(new FileReader(new File(xmlURL)));
			TransformerFactory factory = TransformerFactory.newInstance(); 
			Transformer transformer = factory.newTransformer(new StreamSource(xsltURL)); 
	    
			DocumentSource source = new DocumentSource( document ); 
			DocumentResult result = new DocumentResult(); 
			transformer.transform( source, result ); 
			Document transformedDoc = result.getDocument(); 
			transformedDoc.setXMLEncoding("GB2312");
		    return document.asXML();
	    }catch (Exception e) {
			System.out.println("2、转化文件格式错误!");
			System.exit(1);
		}	
		return "";
	}

      写一篇博客总结一下,方便以后查阅!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值