解析xml文件的学习之DOM方式

==========对xml文档的DOM操作==========

1.获取工厂

DocumentBuilderFactory:定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。newInstance()静态方法:获取 DocumentBuilderFactory 的新实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

2.利用工厂产生实例

newDocumentBuilder()静态方法:使用当前配置的参数创建一个新的 DocumentBuilder 实例。
DocumentBuilder builder = factory.newDocumentBuilder();

3.解析xml文档,得到代表文档的document

Document parse(File f)方法:将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOMDocument 对象。
Document document = builder.parse(new File("***.xml"));

==========读取xml文档中的内容==========

1.获取集合

getElementsByTagName(String tagname)方法:按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的NodeList(返回类型)

NodeList list = document.getElementsByTagName("要查询的属性名");

2.返回需要的项

Node item(int index) 方法:返回集合中的第 index 个项。

Node node = list.item(index);

3.返回节点值

String getTextContent()方法: 此属性返回此节点及其后代的文本内容。

String value = node.getTextContent(); 

==========更新==========

准备工作同上到读取的二步。获得node

void setTextContent(String textContent)方法:来修改内存中节点内容

--------把内存中的document写到xml文件中去

1.获得转换器工厂实例

static TransformerFactory newInstance(String factoryClassName, ClassLoader classLoader)方法: 根据类名称获得一个新 TransformerFactory 实例。 
TransformerFactory tf = TransformerFactory.newInstance();

2.得到转换器

可以通过 TransformerFactory.newTransformer()方法获取类Transformer的实例。

Transformer ts = tf.newTransformer();

3.执行转换

ts.transform(new DOMSource(document), new StreamResult(new File("***.xml")));




==========增加节点=========

1.得到代表文档的document
2.创建需要增加的节点

Node node = document.createElement("标签名");
node.setTextContent("标签内容");

3.得到需要增加节点的父节点

Node parent = document.getElementsByTagName("父节点名").item(index);

4.把需要增加的节点挂到父节点上[内存中]

//向尾部增加节点
parent.appendChild(node);
//向指定位置增加节点使用此方法
parent.parent.insertBefore(newChild, refChild);

5.写到xml文件中同上

==========删除节点=========
核心部分:(利用父节点来删除子节点)
Node node = document.getElementsByTagName("标签名").item(2);
node.getParentNode().removeChild(node);

==========对xml文档属性的操作========

操作xml文档的元素是,一般都把元素当作node对象,但是如果发现node不好使时,就应该把node强转为合适的类型
例如:

Element book = (Element) document.getElementsByTagName("书").item(0);
book.setAttribute("bookid", "yyyy");//修改,前提是bookid存在
book.setAttribute("password", "1234");//新建,前提是password不存在
book.removeAttribute("属性名");//删除,前提是该属性名存在
====

==========改进==========

Element book=null;
Node node = document.getElementsByTagName("书").item(0);
//在使用节点做强转的时候,最好先判断节点类型,类型为Node的静态常量
if(node.getNodeType()==Node.ELEMENT_NODE){
	book = (Element)node;
	book.setAttribute("name", "yyyy");
}

============遍历所有标签实例:=========== 


	public static void list(Node node){                  
		if(node.getNodeType()==Node.ELEMENT_NODE){
			System.out.println(node.getNodeName());
		}
		NodeList list = node.getChildNodes();
		for (int i = 0; i < list.getLength(); i++) {
			Node child = list.item(i);
			list(child);
		}
	}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值