XML学习笔记

原创 2016年06月02日 11:59:29

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乱码问题和encoding的理解

文件编码也称为字符编码,用于指定在处理文本时如何表示字符。一种编码可能优于另一种编码主要取决于它能处理或不能处理哪些语言字符,不过通常首选的是 Unicode。读取或写入文件时,未正确匹配文件编码的情...
  • sxh850297968
  • sxh850297968
  • 2014年11月21日 16:59
  • 5426

[转]四种操作XML方式的比较

1. 介绍 1)DOM(JAXP Crimson解析器)         DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构...
  • zj19880814
  • zj19880814
  • 2013年10月12日 14:12
  • 1040

XML分析工具的比较

一、Crimson和Xerces恩仇录  Crimson来自于Sun捐赠给Apache的ProjectX项目,Xerces来自IBM捐赠给Apache的XML4J项目,结果 Xerces胜出,成了A...
  • xiao190128
  • xiao190128
  • 2015年12月09日 21:23
  • 2455

格式良好的XML文档 (well formed XML)

创建格式良好的XML文档,其实就是使得我们的XML文档能够符合W3C的XML1.0规范。      1.XML中元素:           前面我们说过,XML的语法要求很严格的,所有的XM...
  • wuseyukui
  • wuseyukui
  • 2013年11月02日 17:25
  • 1765

XML使用总结(一)

XML是一种可拓展的标记语言,被设计用来描述、存储及传递数据的语言体,而它的标签没有被预定义,需要用户自行定义,是W3C推荐的数据存储和传递的标准标记语言。 • XML与HTML? • XML的用途...
  • why_2012_gogo
  • why_2012_gogo
  • 2016年03月25日 23:51
  • 2707

有了"数据库"为什么还要用"xml" ?

有了数据库为什么还要用XML?XML与数据库各自的特点、他们的应用与区别我想你从Google上可以查到一大堆,那么在这里 我只说说自己的体会: 1:尽管XML和数据库都可以定义数据模型并存储数据,...
  • baidu_28514449
  • baidu_28514449
  • 2015年11月17日 21:15
  • 2534

使用Labview加载并解析XML文件(字符串的形式)

Labview解析XML文件 1.对于简单的XML文件解析可以使用Labview自带的XML文件解析器实现; 2.对于自定义或者带属性节点的xml就比较难实现了,而且写好的解析程序XML节点顺序不...
  • QingNing3028
  • QingNing3028
  • 2017年07月02日 23:18
  • 1093

Java&Xml教程(十)XML作为属性文件使用

我们通常会将Java应用的配置参数保存在属性文件中,Java应用的属性文件可以是一个正常的基于key-value对,以properties为扩展名的文件,也可以是XML文件.在本案例中,將会向大家介绍...
  • Rongbo_J
  • Rongbo_J
  • 2016年01月31日 14:25
  • 1945

如何打开打开xml文件的方法和软件。

呵,其实最简单的就是用EXCEL表格打开了。。  也可以用Netscape 6来打开XML文档,并且也可以用右键选择“察看源文件”  当你用Netscape 6打开XML文档后,  浏览...
  • dsghfdert
  • dsghfdert
  • 2014年06月20日 09:49
  • 2321

xml文件的读写

1,xml文件的读取     读取xml文件的方式有两种,一种是面向模型的DOM方式,一种是面向事件的SAX方式     DOM方式原理:一次性的将xml文档加入内存,在内存中形成一颗do...
  • lishuangzhe7047
  • lishuangzhe7047
  • 2014年02月19日 22:59
  • 12961
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XML学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)