• XML学习经验实例总结2


    DTD约束
    Book.dtd:
    <!ELEMENT 书架 (书+)>
    <!ELEMENT 书 (书名,价格,介绍)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 价格 (#PCDATA)>
    <!ELEMENT 介绍 (#PCDATA)>						为书名设置属性 name(必须)
    <!ATTLIST 书名  name CDATA #REQUIRED>
    
    Book.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE 书架 
    SYSTEM "book.dtd">
    <书架>
    	<书>
    		<书名 name="wy">计算机科学与技术</书名>
    		<价格>36.0</价格>
    		<介绍>这本书很好</介绍>
    	</书>
    	<书>
    		<书名 name="ztt">科学管理课</书名>
    		<价格>30.0</价格>
    		<介绍>这本书挺好</介绍>
    	</书>
    	<书>
    		<书名 name="wu">李清照集注</书名>
    		<价格>60.0</价格>
    		<介绍>这本书非常好</介绍>
    	</书>
    </书架>
    Jaxp对xml进行DOM解析---读取
    (1)获取XML中的书名
    
    public void read() throws Exception {
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
    
    		Document document = builder.parse("src/book.xml");
    
    		NodeList list = document.getElementsByTagName("书名");
    		Node node = list.item(1);
    		String content = node.getTextContent();
    		System.out.println(content);
    
    	}
    
    
    (2)获取所有的节点
    public void read2() throws Exception {
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
    
    		Document document = builder.parse("src/book.xml");
    
    		Node root = document.getElementsByTagName("书架").item(0);
    		list(root);
    
    	}
    
    	private void list(Node root) {
    		if(root instanceof Element)
    			System.out.println(root.getNodeName());
    		NodeList list=root.getChildNodes();
    		for(int i=0;i<list.getLength();i++)
    		{
    			Node child=list.item(i);
    			list(child);
    		}
    	
    	}
    (3)获取文档中的属性
    		public void read3() throws Exception {
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
    
    		Document document = builder.parse("src/book.xml");
    
    		Element bookname =(Element) document.getElementsByTagName("书名").item(0);
    		String value=bookname.getAttribute("name");
    		System.out.println(value);
    	}
    XML解析---增加
    (1)默认在末尾添加节点
    	@Test
    	public void add() throws Exception
    	{
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
    
    		Document document = builder.parse("src/book.xml");
    		//创建节点
    		Element ele=document.createElement("价格");
    		ele.setTextContent("10元");
    		//创建节点挂在第一个节点上
    		Element book=(Element)document.getElementsByTagName("书").item(0);
    		book.appendChild(ele);
    		//把更新后内存写回到xml文档
    		TransformerFactory tffactory=TransformerFactory.newInstance();
    		Transformer tf=tffactory.newTransformer();
    		tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));
    		
    	}
    
    (2) 在文档指定位置添加节点
    	@Test
    	public void add2() throws Exception {
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
    
    		Document document = builder.parse("src/book.xml");
    		// 创建节点
    		Element ele = document.createElement("价格");
    		ele.setTextContent("10元");
    
    		// 得到参考节点
    		Element refNode = (Element) document.getElementsByTagName("价格").item(0);
    
    		// 得到要挂的节点
    		Element book = (Element) document.getElementsByTagName("书").item(0);
    
    		// 往book节点的指定位置插孩子节点
    		book.insertBefore(ele, refNode);
    		// 把更新后内存写回到xml文档
    		TransformerFactory tffactory = TransformerFactory.newInstance();
    		Transformer tf = tffactory.newTransformer();
    		tf.transform(new DOMSource(document), new StreamResult(
    				new FileOutputStream("src/book.xml")));
    
    	}
    (3) 在文档中为标签添加属性
    	@Test
    	public void addAttr() throws Exception {
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
    
    		Document document = builder.parse("src/book.xml");
    		Element bookname = (Element) document.getElementsByTagName("书名")
    				.item(0);
    		bookname.setAttribute("name", "wy");
    		TransformerFactory tffactory = TransformerFactory.newInstance();
    		Transformer tf = tffactory.newTransformer();
    		tf.transform(new DOMSource(document), new StreamResult(
    				new FileOutputStream("src/book.xml")));
    
    	}
    删除
    1.删除1
    	@Test
    	public void delete1() throws Exception {
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
    
    		Document document = builder.parse("src/book.xml");
    
    		// 得到要删除的节点
    		Element ele = (Element) document.getElementsByTagName("价格").item(0);
    
    		// 得到要删除的节点的父节点
    		Element book = (Element) document.getElementsByTagName("书").item(0);
    
    		// 父节点删除子节点
    		book.removeChild(ele);
    
    		TransformerFactory tffactory = TransformerFactory.newInstance();
    		Transformer tf = tffactory.newTransformer();
    		tf.transform(new DOMSource(document), new StreamResult(
    				new FileOutputStream("src/book.xml")));
    	}
    (2)删除2
    	@Test
    	public void delete2() throws Exception {
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
    
    		Document document = builder.parse("src/book.xml");
    
    		// 得到要删除的节点
    		Element ele = (Element) document.getElementsByTagName("价格").item(0);
    		ele.getParentNode().getParentNode().removeChild(ele.getParentNode());
    		
    		TransformerFactory tffactory = TransformerFactory.newInstance();
    		Transformer tf = tffactory.newTransformer();
    		tf.transform(new DOMSource(document), new StreamResult(
    				new FileOutputStream("src/book.xml")));
    	}
    5更新
    	@Test
    	public void update() throws Exception
    	{
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		DocumentBuilder builder = factory.newDocumentBuilder();
    
    		Document document = builder.parse("src/book.xml");
    
    		Element ele=(Element)document.getElementsByTagName("价格").item(0);
    		ele.setTextContent("100元");
    		
    		//把更新后的内存写到xml文档中去
    		TransformerFactory tffactory = TransformerFactory.newInstance();
    		Transformer tf = tffactory.newTransformer();
    		tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/book.xml")));
    	}
    SAX解析XML
    1.步骤:
      //创建工厂
    		SAXParserFactory factory=SAXParserFactory.newInstance();
    		//得到解析器
    		SAXParser sp=factory.newSAXParser();
    		//得到读取器
    		XMLReader reader=sp.getXMLReader();
    		//设置内容处理器
    		reader.setContentHandler(new ListHandler());
    		//读取xml文档内容
    		reader.parse("src/book.xml");


  • 相关阅读:
    Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境搭建教程
    将Windows Server 2016 打造成工作站(20161030更新)
    阿里云服务器Svn-Server无法连接
    安卓 webview背景色的设置
    安卓handler、thread实现异步任务
    多幅图像下载的时间效率问题
    gridview里item是textView、Button单击事件相应,以及按下效果的取去除
    android dialog圆角显示及解决出现的黑色棱角.(友情提示)
    Android自定义对话框(Dialog)位置,大小
    安卓selector
  • 原文地址:https://www.cnblogs.com/pangblog/p/3310688.html
Copyright © 2020-2023  润新知