`
zeng1990
  • 浏览: 51343 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

使用DOM解析xml

阅读更多
解析xml的技术有很多中,本函数使用的是DOM技术,其中person类中有id,name,age三个属性。xml文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<persons>

	<person id="7">
		<name>shifu</name>
		<age>21</age>
	</person>
	
	<person id="20">
		<name>xiaobaozi</name>
		<age>21</age>
	</person>

	<person id="33">
		<name>xiaozeng</name>
		<age>22</age>
	</person>

</persons>

下面是对上面的xml文件进行解析的详细代码。当然,解析前要将xml文件写道输入流当中。
public List<Person> parser(InputStream inStream) throws Exception {
		
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder documentBuilder = factory.newDocumentBuilder();
		/* 对输入流进行解析 */
		Document document = documentBuilder.parse(inStream);
		
		/* 取得xml中以元素形式组成的文档树 */
		Element root = document.getDocumentElement();
		
		/* 取得以person为根元素的所有子元素的集合(包括person下的所有元素) */
		NodeList personNodes = root.getElementsByTagName("person");
		
		/* 存放解析出来的对象 */
		List<Person> persons = new ArrayList<Person>();
		for(int i = 0; i < personNodes.getLength(); ++i)
		{
			/* 取得person节点 */
			Element personNode = (Element) personNodes.item(i);
			Person person = new Person();
			/* 取得person节点的id属性的值并赋值给person对象 */
			person.setId(new Integer(personNode.getAttribute("id")));
			/* 取得person节点的所有子节点 */
			NodeList childNodes = personNode.getChildNodes();
			for(int k = 0; k < childNodes.getLength(); ++k)
			{
				/* 此处要注意,如果子元素是文本节点而不是元素节点,是不能转换成Element对象的
				 * 所以下面这句应当放到if语句里面,否则将会出现类型转换错误 
				 */
//				Element child = (Element) childNodes.item(k);
				/* 判断当前节点是否是元素节点 */
				if(childNodes.item(k).getNodeType() == Node.ELEMENT_NODE)
				{
					/* 是元素节点,可以转换 */
					Element child = (Element) childNodes.item(k);
					/* 该节点的名称是否是name或age,是则取得他们第一个子节点的文本的值赋值给person对象 */
					if("name".equals(child.getNodeName()))
					{
						person.setName(child.getFirstChild().getNodeValue());
					}
					else if("age".equals(child.getNodeName()))
					{
						person.setAge(new Short(child.getFirstChild().getNodeValue()));
					}
				}
			}
			/* 将生成的对象添加到persons集合中 */
			persons.add(person);
		}
		inStream.close();
		return persons;
	}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics