xml基础

来源:互联网 发布:知乎 装修 编辑:程序博客网 时间:2024/06/05 17:44
xml的概念,xml不是用来显示数据的,是用来传输数据的


在 XML 中,有 5 个预定义的实体引用:
&lt;    <    小于
&gt;    >    大于
&amp;    &    和号
&apos;    '    单引号
&quot;    "    引号

注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。


在xml中一定要注意标签的闭合   在xml中空格会被保留(和html不同)


关于xml的命名习惯:使名称具有描述性。使用下划线的名称也很不错。  比如:<book_title>


XML 元素是可扩展,以携带更多的信息:XML 的优势之一,就是可以经常在不中断应用程序的情况进行扩展。在原有的xml基础上进行内容的增添不会是程序中断


xml元素中的属性的值必须用双引号或单引号括起来,如果值中含有双引号,那就使用单引号括


当感觉一个元素的属性像是信息的时候就把这个属性变为这个这个信息的子元素把


因使用属性而引起的一些问题:

    属性无法包含多重的值(元素可以)
    属性无法描述树结构(元素可以)
    属性不易扩展(为未来的变化)
    属性难以阅读和维护

请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

可以向元素分配id引用,它的作用和html中id的作用是一样的


XML 验证
通过 DTD 验证的 XML 是“合法”的 XML。

文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
为什么使用 DTD?

通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。

通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

而您的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。

您还可以使用 DTD 来验证您自身的数据。

所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:

    元素
    属性
    实体
    PCDATA
    CDATA

前三个自不必多说:

PCDATA:

PCDATA 的意思是被解析的字符数据(parsed character data)。可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
CDATA

CDATA 的意思是字符数据(character data)。 CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。


现在我们已经知道如何构建一个xml文档,下面是如何在js中解析(读取)xml文档或xml字符串,给出了三种方法:

所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器。

解析器把 XML 转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象。
解析 XML 文档

下面的代码片段把 XML 文档解析到 XML DOM 对象中:

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.open("GET","books.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

其他方法 1:通过微软的 XML 解析器来加载 XML

微软的 XML 解析器内建于 Internet Explorer 5 以及更高的版本中。

下面的 JavaScript 片段把一个 XML 文档载入解析器中:

var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("note.xml");

    上面代码的第一个行创建一个空的微软 XML 文档对象。
    第二行关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行。
    第三行告知解析器加载名为 "note.xml" 的 XML 文档。

其他方法 2:在 Firefox 及其他浏览器中的 XML 解析器

下面的 JavaScript 片段把 XML 文档 ("note.xml") 载入解析器:

var xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.async="false";
xmlDoc.load("note.xml");

    上面代码的第一个行创建一个空的 XML 文档对象。
    第二行关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行。
    第三行告知解析器加载名为 "note.xml" 的 XML 文档。

解析 XML 字符串

下面的 JavaScript 代码片段把 XML 字符串解析到 XML DOM 对象中(把字符串 txt 载入解析器):

txt="<bookstore><book>";
txt=txt+"<title>Everyday Italian</title>";
txt=txt+"<author>Giada De Laurentiis</author>";
txt=txt+"<year>2005</year>";
txt=txt+"</book></bookstore>";

if (window.DOMParser)
  {
  parser=new DOMParser();
  xmlDoc=parser.parseFromString(txt,"text/xml");
  }
else // Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async="false";
  xmlDoc.loadXML(txt);
  }

注释:Internet Explorer 使用 loadXML() 方法来解析 XML 字符串,而其他浏览器使用 DOMParser 对象。

注释:loadXML() 方法用于加载字符串(文本),load() 用于加载文件。

今晚尝试使用js读取本地xml文件,读取不到,经网上查阅,回答也是参差不齐,最后大致得出一个结论,js不能直接读取本地xml,要将xml放入服务器中才行,否则写一段扫描硬盘的代码,你的硬盘资料一览无余。大家有什么方法让你的js访问本地xml吗?


0 0
原创粉丝点击