XML学习笔记

1.XML的作用是作为配置文件和描述数据与数据之间的关系。

 

2.XML语法:

最原始的文档声明

<?XMLversion="1.0" ?>

encoding属性是说明字符编码

<?XMLversion="1.0" encoding="gb2312" ?>

standalone说明文档是否是独立的

<?XMLversion="1.0" encoding="gb2312"standalone="yes"?>

 

3.XML元素指的是XML文件中出现的标签,一个标签有结束标签和开始标签。

 

4.对于XML标签中出现的空格或者换行,XML解析程序都会当成标签内容来处理,所以,原来的书写习惯要改变一下。

 

5.属性

一个标签可以有多个属性,每个属性都有自己的名称和取值,

例如:<input name = "text">,属性值一定要用“或‘标起来,

多学一招:

<input>

      <name>text</name>

</input>

此种形式同上。

 

6.CDATA

当有些内容不希望解析程序处理的时候,可以放进CDATA区内,这样解析程序就会原封不动的输出CDATA区内的内容。语法如下:

<![CDATA[...]]>

 

7.处理指令

简称PI(Processing Instruction),处理指令用来指挥解析引擎如何解析文档内容。例如,在XML标签里面的内容可以使用xml-stylesheet指令,通知解析引擎通过CSS文件来显示文档内容,<?xml-stylesheettype="text/css" href="1.css">,处理指令必须在<?...?>内部,声明语句就是最常见的一种指令。

 

8.XML两种约束方式

一种是XML DTD文件,一种是XML schame文件。

先说说DTD方式,可以自己单独一个文件,也可以和XML文件在同一文件内,

语法如图:

#REQUIRED表示此项必须标明,#IMPLIED表示此项是可选。

 

以上就是XML的基本语法了,接下来要进行的是XML编程(CRUD)。

1.Xml文档的两种解析方式

我们在开始编程的时候,首先要知道解析的两种方式,一种是dom,一种是sax,dom是先将整个文档读进内存中,然后将一个个标签都封装为对象,它的优点是CRUD很方便,但是占用内存空间大。

Sax是一条一条指令读进内存里,这种方式适合读取文档,解析速度快,但是CRUD不适合。

 

2.如何改变jvm的允许使用内存上限

在我们进行编程的时候,随着程序逐渐扩大,我们的程序占用的大小可能会逐渐变大,但是JVM最大只允许我们用64M内存,这时候就需要我们手动扩大上限,在jvm的配置里面写上-Xmx80m,这样我们就可以使用80兆,以此类推。

 

3.如何利用Java编程对xml文档进行增删改查(CRUD)

1)前置步骤

首先将xml文档转换为document对象,代码如下:

// 第一步,创建工厂
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		// 第二步,获得dom解析器
		DocumentBuilder builder = factory.newDocumentBuilder();
		// 第三步,解析xml文件,获得代表文档的document
		Document document = builder.parse("src/book.xml");


如何将更改后的document对象写入内存并向xml文件进行写入

//把更新后的内存写进xml文件
      TransformerFactory tffactory = TransformerFactory.newInstance();
      Transformer tf = tffactory.newTransformer();
      tf.transform(new DOMSource(document),
           new StreamResult(new FileOutputStream("src/book.xml")));

 

2)在dom解析下,XML文档中的任意组成部分都可以用对象来表示,例如:元素可以用element,属性可以用attr表示,但是不管是什么对象,都是node的子类,所以在开发中可以将任意的节点都当做是node对待,也就是所谓的向上转型,多态的存在。

3)获取某个节点源码如下:

public void read1() 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(0);
      String content = node.getTextContent();
      System.out.println(content);
   }

4)遍历xml所有的元素标签(节点)源码:

//遍历所有的元素标签
   @Test
   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 node) {
      if (node instanceof Element) {
        System.out.println(node.getNodeName());
      }
      NodeList list = node.getChildNodes();
      for (int i = 0; i < list.getLength(); i++) {
        Node child = list.item(i);
        list(child);
      }
   }

5)向xml文件中添加节点源码:

//向xml文件中添加标签:<售价>34.00</售价>
   @Test
   public void add() throws Exception {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse("src/book.xml");
     
      //创建节点
      Element price = document.createElement("售价");
      price.setTextContent("49");
     
      //将新节点挂在第一本书上
      Element book = (Element) document.getElementsByTagName("书").item(0);
      book.appendChild(price);
     
      //把更新后的内存写进xml文件
      TransformerFactory tffactory = TransformerFactory.newInstance();
      Transformer tf = tffactory.newTransformer();
      tf.transform(new DOMSource(document),
           new StreamResult(new FileOutputStream("src/book.xml")));
   }

6)向xml文件中指定位置添加节点源码:

//向xml文件中指定位置添加标签:<售价>34.00</售价>
   @Test
   public void add2() throws Exception {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse("src/book.xml");
     
      //创建节点
      Element price = document.createElement("售价");
      price.setTextContent("49");
     
      //获得参考节点
      Element refNode = (Element) document.getElementsByTagName("售价").item(0);
     
      //得到要挂孩子的节点
      Element book = (Element) document.getElementsByTagName("书").item(0);
     
      //将新节点插入到指定位置
      book.insertBefore(price, refNode);
     
      //把更新后的内存写进xml文件
      TransformerFactory tffactory = TransformerFactory.newInstance();
      Transformer tf = tffactory.newTransformer();
      tf.transform(new DOMSource(document),
           new StreamResult(new FileOutputStream("src/book.xml")));
   }

7)向xml文件中的标签添加属性源码:

//向xml文件的标签中添加属性:<售价>34.00</售价> 添加name="price"属性
   @Test
   public void addAttr() throws Exception {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse("src/book.xml");
     
      //得到要添加属性的节点
      Element price = (Element) document.getElementsByTagName("售价").item(0);
     
      //添加属性
      price.setAttribute("name", "price");
     
      //把更新后的内存写进xml文件
      TransformerFactory tffactory = TransformerFactory.newInstance();
      Transformer tf = tffactory.newTransformer();
      tf.transform(new DOMSource(document),
           new StreamResult(new FileOutputStream("src/book.xml")));
   }

8)删除节点的第一种方式源码:

//第一种删除xml的标签的方法:<售价>34.00</售价>
   @Test
   public void delete1() throws Exception {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse("src/book.xml");
     
      //得到要删除的节点
      Element e = (Element) document.getElementsByTagName("售价").item(0);
     
      //得到被删除节点的父亲
      Element father = (Element) document.getElementsByTagName("书").item(0);
     
      //调用父亲的删除方法
      father.removeChild(e);
     
      //把更新后的内存写进xml文件
      TransformerFactory tffactory = TransformerFactory.newInstance();
      Transformer tf = tffactory.newTransformer();
      tf.transform(new DOMSource(document),
           new StreamResult(new FileOutputStream("src/book.xml")));
   }

9)删除节点的第二种方式源码:

//第2种删除xml的标签的方法:<售价>34.00</售价>
   @Test
   public void delete2() throws Exception {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse("src/book.xml");
     
      //得到要删除的节点
      Element e = (Element) document.getElementsByTagName("售价").item(0);
     
      //通过孩子来得到被删除节点的父亲
      e.getParentNode().removeChild(e);
     
      //把更新后的内存写进xml文件
      TransformerFactory tffactory = TransformerFactory.newInstance();
      Transformer tf = tffactory.newTransformer();
      tf.transform(new DOMSource(document),
           new StreamResult(new FileOutputStream("src/book.xml")));
   }

10)将节点中的内容进行更新源码:

//更新售价:<售价>104.00</售价>
   @Test
   public void update() throws Exception {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse("src/book.xml");
     
      //得到要更新的节点
      Element e = (Element) document.getElementsByTagName("售价").item(0);
     
      e.setTextContent("104");
      //把更新后的内存写进xml文件
      TransformerFactory tffactory = TransformerFactory.newInstance();
      Transformer tf = tffactory.newTransformer();
      tf.transform(new DOMSource(document),
           new StreamResult(new FileOutputStream("src/book.xml")));
   }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值