用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

解析xml文件实例

2012-11-16 作者: 程序猿style举报

[java]代码库

	/**
 * dom的基本对象有5个:document,node,nodelist,element和attr
 * document对象代表了整个xml的文档,所有其它的node,都以一定的顺序包含在document对象之内,排列成一个树形的结构,程序员可以通过遍历这颗树来得到xml文档的所有的内容,这也是对xml文档操作的起点。我们总是先通过解析xml源文件而得到一个document对象,然后再来执行后续的操作.
 * node对象是dom结构中最为基本的对象,代表了文档树中的一个抽象的节点。在实际使用的时候,很少会真正的用到node这个对象,而是用到诸如element、attr、text等node对象的子对象来操作文档。node对象为这些对象提供了一个抽象的、公共的根。虽然在node对象中定义了对其子节点进行存取的方法,但是有一些node子对象,比如text对象,它并不存在子节点,这一点是要注意的。
 * nodelist对象,顾名思义,就是代表了一个包含了一个或者多个node的列表.
 * element对象代表的是xml文档中的标签元素,继承于node,亦是node的最主要的子对象。在标签中可以包含有属性,因而element对象中有存取其属性的方法,而任何node中定义的方法,也可以用在element对象上面。
 * attr对象代表了某个标签中的属性。attr继承于node,但是因为attr实际上是包含在element中的,它并不能被看作是element的子对象,因而在dom中attr并不是dom树的一部分,所以node中的getparentnode(),getprevioussibling()和getnextsibling()返回的都将是null。也就是说,attr其实是被看作包含它的element对象的一部分,它并不作为dom树中单独的一个节点出现。这一点在使用的时候要同其它的node子对象相区别。
 */
	public static List readXMLFile(String inFile) throws Exception {
		//	得到DOM解析器的工厂实例
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = null;
		try {
			// 从DOM工厂获得DOM解析器
			db = dbf.newDocumentBuilder();
		} catch (ParserConfigurationException pce) {
			System.err.println(pce); 
			return null;
		}

		Document doc = null;
		try {
			// 解析XML文档的输入流,得到一个Document
			doc = db.parse(inFile);
			// 对document对象调用normalize(),可以去掉xml文档中作为格式化内容的空白,
			// 避免了这些空白映射在dom树中成为不必要的text node对象。
			// 否则你得到的dom树可能并不是你所想象的那样。
			// 特别是在输出的时候,这个normalize()更为有用。 
			doc.normalize();
		} catch (DOMException dom) {
			System.err.println(dom.getMessage());
			return null;
		} catch (IOException ioe) {
			System.err.println(ioe);
			return null;
		}

		List studentBeans = new ArrayList();
		StudentBean studentBean = null;
		//	得到XML文档的根节点“学生花名册”
		Element root = doc.getDocumentElement();
		//	取"学生"元素列表
		NodeList students = root.getElementsByTagName("学生");
		for (int i = 0; i < students.getLength(); i++) {
			//	依次取每个"学生"元素
			Element student = (Element) students.item(i);
			//	创建一个学生的Bean实例
			studentBean = new StudentBean();
			//	取学生的性别属性
			studentBean.setGender(student.getAttribute("性别"));
			
			//	取“姓名”元素
			NodeList names = student.getElementsByTagName("姓名");
			if (names.getLength() == 1) {
				Element e = (Element) names.item(0);
				// 取姓名元素的第一个子节点,即为姓名的值节点
				Text t = (Text) e.getFirstChild();
				// 获取值节点的值
				studentBean.setName(t.getNodeValue());
			}

			// 取“年龄”元素
			NodeList ages = student.getElementsByTagName("年龄");
			if (ages.getLength() == 1) {
				Element e = (Element) ages.item(0);
				Text t = (Text) e.getFirstChild();
				studentBean.setAge(Integer.parseInt(t.getNodeValue()));
			}

			//	取“电话”元素
			NodeList phones = student.getElementsByTagName("电话");
			if (phones.getLength() == 1) {
				Element e = (Element) phones.item(0);
				Text t = (Text) e.getFirstChild();
				studentBean.setPhone(t.getNodeValue());
			}
			// 将新建的Bean加到结果列表中
			studentBeans.add(studentBean);
		}
		// 返回结果列表
		return studentBeans;
	}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...