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

阅读更多
想对作者说点什么? 我来说一句

XML DOM4J学习笔记

2009年10月15日 3KB 下载

xml学习笔记

2014年01月12日 2KB 下载

北京圣思园xml学习笔记

2016年06月15日 31KB 下载

XML学习大全(适合开发人员)

2008年12月19日 47KB 下载

xml学习笔记.docx

2014年07月27日 14KB 下载

没有更多推荐了,返回首页

不良信息举报

XML学习笔记

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭