使用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
对显示要求高
更新由客户端完成
客户端和服务端直接通信,理论上支持有限客户端
客户端要求较高
服务器对安全要求较高
服务器扩展较较低
相对速度较快
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值