JavaWeb(四)-----用Java程序操作XML①

        XML的诞生原本是用来对数据进行更好更快的存储。XML的雏形用于航空工业,到后来慢慢进行简化,形成了我们现在常用的形式,由于XML能够很好的表现数据的层次结构(在java中,一般集合也就能表现出一种平面结构),在以前很多人都认为xml会成为一种卓越的语言,甚至提到Java等编程语言。后来证明:XML不仅没有取代java,反而成为java很好的帮手。闲话不扯了。进入正题。。。

XML是用来保存数据的,对于数据的操作,就是增删改查。

获取代表XML文档的Document对象

java程序在读取XML一般有两种方式。一:DOM形式读取。特点是:结构清晰,容易使用,但是占用内存较大二:SAX。使用流式读取XML。特点:占用内存小,但是不能全部获取所有的节点,不方便操作。程序开发一般使用DOM模型来解析xml。在J2SE包中后几个是关于采用DOM方式解析xml的。
         Document对象代表xml文件。所有的节点用Node代表。通过Node可以获取节点的某些数据。Element对象代表xml中的单个元素。可以通过该对象获取元素的数据,比如说:属性等。
  获取document对象需要通过Java提供的DocumentBuilderFactory工厂类获取DocumentBuilder。注意:DocumentBuilderFactory的构造函数私有,需要使用newInstance方法获取该工厂实例。通过工厂实例获取解析器实例DocumentBuoilder。
然后使用解析器实例获取代表Xml文档的Document对象。示例代码:
public static Document getDocument() throws Exception
	{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder=factory.newDocumentBuilder();
		Document document=builder.parse(new File("src/student.xml"));
		return document;
	}

使用XML增加数据

       增加数据的算法大致是:先通过Document实例创造出你要添加的节点。将创建好节点挂靠在父节点下。可以指定增加节点的位置。
1.不指定位置添加节点。示例代码:
public  void add()
	{
		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
		
		try {
			DocumentBuilder builder=factory.newDocumentBuilder();
			
			Document document=builder.parse(new File("src/book.xml"));
			
			Element e=document.createElement("售价");
			
			e.setTextContent("59.00");
			
			Node book=document.getElementsByTagName("书").item(0);
			
			book.appendChild(e);
			
			TransformerFactory f= TransformerFactory.newInstance();
			
			Transformer transfomer=f.newTransformer();
			
			transfomer.transform(new DOMSource(document), new StreamResult(new File("src/book.xml")));
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

对应的xml文件是:
<?xml version="1.0" encoding="utf-8" standalone="no"?><书架>
	<书 name="yyyy">
		<售价>109</售价>
		<售价>50</售价><书名>Java就业培训教程</书名>
		<作者>ligang</作者>
		<售价>59.00</售价>
	</书>

</书架>

2在指定位置添加节点。思路是:创建节点,找到插入位置后面的一个节点,通过父节点的insertbefore挂靠节点:示例代码:
public void add2()
	{
		DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
		
		try {
			DocumentBuilder builder=factory.newDocumentBuilder();
			Document document=builder.parse(new File("src/book.xml"));
			Element e=document.createElement("售价");
			
			e.setTextContent("50");
			
			Node node=document.getElementsByTagName("书").item(0);
			
			node.insertBefore(e,  document.getElementsByTagName("书名").item(0));
			
			
			TransformerFactory f= TransformerFactory.newInstance();
			
			Transformer t=f.newTransformer();
			
			t.transform(new DOMSource(document),new StreamResult(new File("src/book.xml")));
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}


查找节点:
通过Document对象可以获取某个指定的节点。通过标签名获取含有该标签名的所有节点结合(NodeList)。便利集合,找到你要查找的节点或者数据;示例代码:
public static Student findStudentFormName(String name) {
		Student s =new  Student();
		try {
			Document document =Dao.getDocument();
			NodeList node1=document.getElementsByTagName("姓名");
			for(int i=0;i<node1.getLength();i++)
			{
				if(node1.item(i).getTextContent().equals(name))
				{
					Node student=node1.item(i).getParentNode();
					
					if(student.getNodeType()==Node.ELEMENT_NODE)
					{
						NodeList list=student.getChildNodes();
						
						s.setName(name);
						for(int j=0;j<list.getLength();j++)
						{
							Node n = list.item(j);
							String context = n.getTextContent();
							
							if(n.getNodeName().equals("学号"))
							{
								s.setId(Integer.valueOf(context));
							}else if(n.getNodeName().equals("性别"))
							{
								s.setSex(context);
							}else if(n.getNodeName().equals("操作系统"))
							{
								s.setGradeOS(Double.valueOf(context));
							}else if(n.getNodeName().equals("c语言"))
							{
								s.setGradeC(Double.valueOf(context));
							}
							
						}
						
					}
					
				} 
				
			}
		}catch(Exception e)
		{
			e.printStackTrace();
		}
		
		return s;
			
		
	}
xml文件是:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><信息>

<学生><c语言>78.0</c语言><操作系统>89.0</操作系统><性别>男</性别><姓名>袁阳</姓名><学号>123456</学号></学生></信息>
对应的JavaBean可以自己写。
接下来会通过java语言来删除数据和利用xml做的信息管理系统。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值