dom4j生成和解析xml文件

3 篇文章 0 订阅
2 篇文章 0 订阅

在生成xml文件指定生成的目的地和文件的输出方式时,如果使用的是Writer,那么在生成的xml中含有中文的时候会出现中文乱码,此时就只能使用OutputStream了,因为Writer遇到中文的时候不知道该如何解析。

如:XMLWriter writer = new XMLWriter(new FileOutputStream(dest), format);

 

 

 

 

 

 

/**
	 * 创建xml文件
	 * @param dest
	 * @throws IOException
	 */
	public static void createXml(String dest) throws IOException {
		//新建一个document
		Document document = DocumentHelper.createDocument();
		//设置输出字符集
		document.setXMLEncoding("UTF-8");
		//新建一个位于document下的元素persons
		Element personsEle = document.addElement("persons");
		for (int i=1;i<6;i++) {
			//新建一个位于persons下的元素person
			Element person = personsEle.addElement("person");
			//添加属性
			person.addAttribute("id", String.valueOf(i));
			person.addAttribute("sex", new String("女".getBytes()));
			Element name = person.addElement("name");
			name.setText("person"+i);
		}
		//美化输出格式
		OutputFormat format = OutputFormat.createPrettyPrint();
		//新建一个XMLWriter,同时指定输出位置和格式
		XMLWriter writer = new XMLWriter(new FileOutputStream(dest), format);
		//把新建好的document写到指定输出位置
		writer.write(document);
		writer.close();
	}
	
	/**
	 * 读取并解析xml文件
	 * @param fileName
	 * @throws DocumentException
	 */
	public static void readXml(String fileName) throws DocumentException {
		SAXReader reader = new SAXReader();
		Document document = reader.read(Util.class.getClassLoader().getResourceAsStream(fileName));
		Element root = document.getRootElement();
		iteratorEle(root);
	}
	
	/**
	 * 通过父节点来遍历其下的所有子节点,并取出它们的文本值和属性值
	 * @param root
	 */
	public static void iteratorEle(Element root) {
		String rootName = root.getName();
		Iterator iter = root.elementIterator();
		while (iter.hasNext()) {
			Element ele = (Element) iter.next();
			String eleName = ele.getName();
			System.out.println("元素"+rootName+"有子节点"+eleName);
			Iterator attrIter = ele.attributeIterator();
			while (attrIter.hasNext()) {
				Attribute attr = (Attribute)attrIter.next();
				String attrName = attr.getName();
				String attrValue = (String)attr.getData();
				System.out.println("元素"+rootName+"的子元素"+eleName+"的属性"+attrName+"的值是:"+attrValue);
			}
			if (ele.isTextOnly()) {
				String content = ele.getText();
				System.out.println("元素"+rootName+"的子元素"+eleName+"的值是:"+content);
			}
			iteratorEle(ele);
		}
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值