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");


你可能感兴趣的:(xml)