解析XML的 - dom4j 和 jdom

1、XML :(eXtensible Markup Language) 可扩展的标记语言,XML主要是为了传输和保存数据用的,可跨平台。

     XML中的DTD :定义XML文件中的元素和属性 :   Document Type Definition 文档类型定义

 <!--
DTD定义:
<!DOCTYPE 根元素名 [
<!ELEMENT 元素名 (子元素)>
<!ELEMENT 元素名 元素类型>
 <!ATTLIST 依附的元素名 属性名 属性类型 默认值>
]>

属性的类型:
ID :在标签中ID的值必须是唯一的值 ID类型的值不能是数字开头
CDATA: 可以是任意的字符串
枚举类型: 将尽可能的情况列举出来

默认值:
#REQUIRED:必须出现required
#IMPLIED :可以出现也可以不出现 implied
#FIXED: 固定值
-->

 

2、DOM4J: Document for Java ,底层已经封装好IO操作的一个第三方中间件。

3、解析XML

方法1:用dom4j解析XML

public static void main(String []args)throws Exception{//1 获得解析器对象
		SAXReader reader = new SAXReader();
		//2 通过解析器对象解析XML文件
		File file = new File("test.xml");
		Document doc = reader.read(file);
		//3 解析文件,得到根元素
		Element root = doc.getRootElement();
		//4 得到所有的一级子元素
		List<Element> firsts = root.elements();
/*	
	//中文解码,如果出现乱码可以这样解码,传入的不是个文件对象,而是个xml形式的String类型的串。
   Document doc = DocumentHelper.parseText(URLDecoder.decode(xml, "UTF-8"));//xml是String类型
   Element root= doc.getRootElement();
   List<Element> firsts = root.elements();
	//以下就相同了
*/

		for(Element e:firsts){
			//得到当前一级子元素的所有的属性
			List<Attribute> attrs = e.attributes();
			for(Attribute a:attrs){
				System.out.print("属性:"+a.getName()+"=\""+a.getValue()+"\"\t");
				//getName() 可以得到属性的名称 getValue() 可以得到属性对应的值
			}

			//得到对应的所有的二级子元素
			List<Element> seconds = e.elements();
			for(Element sec:seconds){
				String eleName = sec.getName();//getName()也可以得到当前元素的名称
				String eleText = sec.getText();//getText()用来得到某个元素的值
                                System.out.print("\n当前二级子元素名:"+eleName+" 内容是:"+eleText);
			}
			System.out.println();
		}

	}

也可以用得到某个元素的值: String eleText = elementTextTrim("NAME");//
 

方法2、用jdom解析xml

try{
	    		result = URLDecoder.decode(result, "UTF-8");
			}catch (UnsupportedEncodingException e1){
				e1.printStackTrace();
				result = "中文字符转码错误";
			}
		
			StringReader read = new StringReader(result);
			InputSource source = new InputSource(read);
			SAXBuilder sb = new SAXBuilder();

Document doc = sb.build(source);
				Element root = doc.getRootElement();
				List firsts= root.getChildren("STUDENTINFO");//获取一级子元素
}catch (JDOMException e){
    log.error(e);
    result = "解析失败";
}


  dom4j和jdom大同小异,个人习惯用dom4j,只要能解决问题就行。

你可能感兴趣的:(xml,dom4j,jdom)