• XML 学习(二)


    1.了解XML DOM

    XML DOM 是 XML Document Object Model 的缩写,即 XML 文档对象模型。

    XML DOM 是用于获取、更改、添加或删除 XML 元素的标准。

    2.XML DOM 节点

    XML文档中的每个成分都是一个节点。

    • 整个文档是一个文档节点
    • 每个XML标签是一个元素节点
    • 包含在XML元素中的文本是文本节点
    • 每个XML属性是一个属性节点
    • 注释属于注释节点 


    XML例子
     1 <?xml version="1.0" encoding="ISO-8859-1"?>
    2
    3 <bookstore>
    4
    5 <book category="children">
    6 <title lang="en">Harry Potter</title>
    7 <author>J K. Rowling</author>
    8 <year>2005</year>
    9 <price>29.99</price>
    10 </book>
    11
    12 <book category="cooking">
    13 <title lang="en">Everyday Italian</title>
    14 <author>Giada De Laurentiis</author>
    15 <year>2005</year>
    16 <price>30.00</price>
    17 </book>
    18
    19 <book category="web">
    20 <title lang="en">Learning XML</title>
    21 <author>Erik T. Ray</author>
    22 <year>2003</year>
    23 <price>39.95</price>
    24 </book>
    25
    26 <book category="web">
    27 <title lang="en">XQuery Kick Start</title>
    28 <author>James McGovern</author>
    29 <author>Per Bothner</author>
    30 <author>Kurt Cagle</author>
    31 <author>James Linn</author>
    32 <author>Vaidyanathan Nagarajan</author>
    33 <year>2003</year>
    34 <price>49.99</price>
    35 </book>
    36
    37 </bookstore>


    注意:元素节点不包含文本,不过元素节点中的文本时储存在文本节点中的

    例如:

    <year>2005</year>,元素节点 <year>,拥有一个值为 "2005" 的文本节点。

    "2005" 不是 <year> 元素的值!

    3.加载、解析XML DOM

    xml文件要以DOM的方式加载在浏览器中,然后通过浏览器中解析,浏览。

    各大浏览器水深火热的厮杀,互不相让,因此我们这些开发人员伤不起啊!

    DOM的解析,在各个浏览器中的解析方法也各不相同!

    还好,思路都基本相同:

    • 创建空的 XML 文档对象
    • 关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
    • 告知解析器加载 xml文档或者字符串

    微软解析器加载xml的方法:

    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.load("xml路径");

    载入字符串:

    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.loadXML(txt);

    火狐或者其他浏览器载入xml的方法:

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

    载入字符串:

    <!--创建一个空的 XML 文档对象-->
    parser=new DOMParser();
    <!--告知解析器加载名为 txt 的字符串-->
    xmlDoc=parser.parseFromString(txt,"text/xml");

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

    当然我们也可以将微软个火狐的方法合在一块,实现跨域访问

    代码如下:

    <script type="text/javascript">
    try //Internet Explorer
    {
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    }
    catch(e)
    {
    try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
    catch(e) {alert(e.message)}
    }
    try
    {
    xmlDoc.async=false;
    xmlDoc.load("books.xml");
    document.write("xmlDoc is loaded, ready for use");
    }
    catch(e) {alert(e.message)}
    </script>

    4.XML DOM 属性和方法

    属性经常按照“某事物是什么”的方式来使用(例如节点名是 "book")。

    方法经常按照“对某事物做什么”的方式来使用(例如删除 "book" 节点)。

    XML DOM属性:

    • x.nodeName - x 的名称
    • x.nodeValue - x 的值
    • x.parentNode - x 的父节点
    • x.childNodes - x 的子节点
    • x.attributes - x 的属性节点
    • x.length - x 的属性节点列表的长度(即节点的数目)

           firstChild: 表示第一个子节点

           lastChild:表示最后一个子节点

           nextSibling:表示某节点的上下一个节点

           previousSibling:表示某节点的上一个节点

    XML DOM 方法:

    • x.getElementsByTagName(name) - 获取带有指定标签名称的所有元素
    • x.appendChild(node) - 向 x 插入子节点
    • x.removeChild(node) - 从 x 删除子节点

    注释:在上面的列表中,x 是一个节点对象。
    为了避免因加载文档而重复编写代码,可以加载xml文件的方法的代码存储在一个单独的 JavaScript 文件中,

    然后连接一个连接指向javascript文件,并使用 loadXMLDoc() 函数加载 XML 文档。

    例子:

    封装加载xml
    function loadXMLDoc(dname) 
    {
    try //Internet Explorer
    {
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    }
    catch(e)
    {
    try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
    catch(e) {alert(e.message)}
    }
    try
    {
    xmlDoc.async=false;
    xmlDoc.load(dname);
    return(xmlDoc);
    }
    catch(e) {alert(e.message)}
    return(null);
    }
    调用封装的js
    <html>
    <head>
    <!--指向封装的加载xml的js-->
    <script type="text/javascript" src="loadxmldoc.js">
    </script>
    </head>
    <body>
    <script type="text/javascript">
    <!--loadXMLDoc() 函数加载 XML 文档-->
    xmlDoc=loadXMLDoc("books.xml");
    document.write("xmlDoc is loaded, ready for use");
    </script>
    </body>
    </html>


    遍历节点:

    xmlDoc=loadXMLDoc("books.xml");

    x=xmlDoc.documentElement.childNodes;

    for (i=0;i<x.length;i++)
    {
    if (x[i].nodeType
    ==1)
    {//Process only element nodes (type 1)
    document.write(x[i].nodeName);
    document.write("<br
    />");
    }
    }

    注释:

    1. 通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中
    2. 获得根元素的子节点
    3. 检查每个子节点的节点类型。如果节点类型是 "1",则是元素节点
    4. 如果是元素节点,则输出节点的名称

    主要的节点类型:

    元素类型    节点类型

     元素             1

     属性             2

     文本             3

     注释             8

     文档             9

    可以参见《DOM节点类型

    注意:getElementsByTagName() 方法返回节点列表 (node list)。节点列表是节点的数组。
    5.XML DOM 浏览器差异

    在xml中空白和换行是被保留的,所以对dom来说,空白和换行也被认为是一个节点,

    忽略节点间的空文本

    xmlDoc=loadXMLDoc("books.xml");

    x=xmlDoc.documentElement.childNodes;

    for (i=0;i<x.length;i++)
    {
    if (x[i].nodeType
    ==1)
    {// only process element nodes
    document.write(x[i].nodeName);
    document.write("<br
    />");
    }
    }






  • 相关阅读:
    UE4智能指针:TUniquePtr
    浅析UE4垃圾回收
    UE4中资源的引用
    ELF文件基础
    【JVM】JVM和Java 体系架构
    【Java多线程】Java线程生命周期、线程同步、线程通信(二)
    【Java多线程】Java多线程基础(一)
    【Java面试题】MySQL索引底层为什么用到B+树
    【算法】B树、B+树详解
    【Kafka】 Kafka的简介与架构(三)
  • 原文地址:https://www.cnblogs.com/liuxiuhao/p/2423843.html
Copyright © 2020-2023  润新知