`
Junjiejkl
  • 浏览: 59796 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用dom来解析XML文件

阅读更多
car.xml:
<?xml version="1.0" encoding="UTF-8"?>
<车辆清单>
	<汽车>
		<车牌 出产时间="2009年">奥迪</车牌>
		<产地>北京</产地>
	</汽车>

</车辆清单>


car.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 车辆清单 (汽车+)>
<!ELEMENT 汽车     (车牌,产地)>
<!ELEMENT 车牌     (#PCDATA)>
<!ELEMENT 产地     (#PCDATA)>

<!ATTLIST 车牌 出产时间 CDATA #REQUIRED> 


Demo1.java:
package cn.itcast.xml.parser.dom;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class Demo1 {
	public static void main(String[] args) throws Exception {
		//创建DOM解析器工厂[抽象工厂设计模式]
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//设置将空白字符忽略
		factory.setIgnoringElementContentWhitespace(true);
		//DOM解析器
		DocumentBuilder parser = factory.newDocumentBuilder();
		//加载XML文件,取得代表整个XML的document对象
		Document document = parser.parse(new File("src/cn/itcast/xml/parser/dom/car.xml"));
		//取得根元素
		Element rootElement = document.getDocumentElement();
		System.out.println("根元素名称:" + rootElement.getNodeName());
		NodeList list = rootElement.getChildNodes();
		System.out.println("共有" + list.getLength()+"辆汽车");
		for(int i=0;i<list.getLength();i++){
			Element element = (Element) list.item(i);
			String band = element.getElementsByTagName("车牌").item(0).getFirstChild().getTextContent();
			String place = element.getElementsByTagName("产地").item(0).getFirstChild().getTextContent();
			System.out.println("车牌:" + band);
			System.out.println("产地:" + place);
			System.out.println("-------------");
		}
	}
}


Demo2.java:
package cn.itcast.xml.parser.dom;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class Demo2 {
	@Test
	public void create() throws Exception{
		Document document = getDocument();
		Element rootElement  = document.getDocumentElement();
		//创建元素
		Element carElement = document.createElement("汽车");
		//创建文本
		Text text = document.createTextNode("比亚迪");
		carElement.appendChild(text);
		//创建属性
		carElement.setAttribute("id","aaaaaa");
		rootElement.appendChild(carElement);
		writeToFile(document);
	}
	@Test
	public void update() throws Exception{
		Document document = getDocument();
		Element rootElement = document.getDocumentElement();
		NodeList list = rootElement.getChildNodes();
		Element carElement = (Element) list.item(3);//定位于第二辆汽车
		carElement.getElementsByTagName("产地").item(0).setTextContent("广州");
		writeToFile(document);
	}
	@Test
	public void delete() throws Exception{
		Document document = getDocument();
		Element rootElement = document.getDocumentElement();
		Element carElement = (Element) rootElement.getElementsByTagName("汽车").item(1);
		carElement.getParentNode().removeChild(carElement);
		writeToFile(document);
	}	
	private Document getDocument() throws Exception {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setIgnoringElementContentWhitespace(true);
		DocumentBuilder parser = factory.newDocumentBuilder();
		Document document = parser.parse(new File("src/cn/itcast/xml/parser/dom/car.xml"));
		return document;
	}

	private void writeToFile(Document document)throws Exception {
		//创建XML输出工厂
		TransformerFactory tf = TransformerFactory.newInstance();
		//创建XML输出对象
		Transformer t = tf.newTransformer();
		//源对象
		DOMSource source = new DOMSource(document);
		//目标对象
		StreamResult result = new StreamResult(new File("src/cn/itcast/xml/parser/dom/car.xml"));
		//真正输出
		t.transform(source,result);
	}
}


*1,dom解析器
//DOM4J(SAXReader)
//SAX(SAXParser)
//DOM(DocumentBuilder)
DOM解析器常用API:
DocumentBuilderFactory.newInstance():创建DOM解析器工厂
factory.newDocumentBuilder():创建DOM解析器
factory.setIgnoringElementContentWhitespace(true):设置忽略空白字符[根元素]
parser.parse(new File("car.xml")):加载需要解析的XML文件
document.getDocumentElement():取得XML的根元素
rootElement.getNodeName():取得元素的名称
list.getLength():取得子元素的长度
list.item(i):取得第i个子元素,从0开始
element.getElementsByTagName("车牌"):取得该元素下以"车牌"命名的所有子元素的集合
element.getFirstChild():取得该元素下的第一个子元素
element.getTextContent():取得该元素中的字符串内容(不是对象)
document.createElement("汽车");创建新元素
Element.appendChild(carElement):向父元素填加子元素
document.createTextNode("比亚迪"):创建新文本
Element.appendChild(text):追加对象到父元素
Element.setAttribute("id","aaaaaa"):创建新属性和属性值
Element.getParentNode():取得该元素的直接父元素
Elemnet.removeChild(carElement):从父元素中删除子元素

2,web基本概念和安装配置tomcat服务器
   JavaWeb(servlet/jsp),静态Web资源(html),动态Web资源(servlet/jsp),Web服务器

3,tomcat启动时常见错误及其处理方案
   (1)没有配置JAVA_HOME
   (2)端口号被其它网络程序占用
   (3)在web服务器集群情况下,如何确定启动哪台

4,网站,web应用,web资源的关系,以及web应用的结构

*5,配置虚拟目录
   tomcat/conf/server.xml,每次改动该文件后,需要重新启动tomcat。
   <Context path="/虚拟目录名" docBase="真实web应用存储的位置"/>
   如果将web应用直接放在webapps/目录下,tomcat服务器会自动将位于该目录下的web应用名映射虚拟目录(tomcat6)
   如果在非webapps/目录下放置web应用,必须手工映射虚拟目录(tomcat6)
   path=""
   docBase=""
   unpackWAR="true"当tomcat启动时,自动将位于webapps/目录中的WAR文件解压",默认为true
   reloadable="true/false,tomcat服务器自动检查内容是否有更新,如果有,在true情况下,自动加载最重内容,无需手工
               重启。在false情况下,必须手工重启"。[webapps/应用名/WEB-INF/lib或classes]
               开发阶段最好使用true,在上线阶段最好使用false。

  
*6,配置虚拟网站
   (1)浏览器访问服务器的原理
   (2)在tomcat中配置多个虚拟网站

7,web架构
B/S                    C/S
浏览器/服务器          客户端/服务器

区别:


B/S
对显示要求不高
更新由服端完成
客户端和服务端间接通信,理论上支持无限客户端
客户端只要有浏览器,要求不高
服务器对安全要求可以分散,因此相对而且要求较低
服务器扩展性较高
相对速度较慢


C/S
对显示要求高
更新由客户端完成
客户端和服务端直接通信,理论上支持有限客户端
客户端要求较高
服务器对安全要求较高
服务器扩展较较低
相对速度较快















分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics