• xml教程


    XML 文档对象模型定义访问和操作XML文档的标准方法。

    DOM 将 XML 文档作为一个树形结构,而树叶被定义为节点。

    XML DOM 把 XML 文档视为一种树结构。这种树结构被称为节点树。

    可通过这棵树访问所有节点。可以修改或删除它们的内容,也可以创建新的元素。

    XML DOM 定义了访问和处理 XML 文档的标准方法。

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

    xml每个成分都是节点、

    根据 DOM,XML 文档中的每个成分都是一个节点。

    DOM 是这样规定的:

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

    看一个例子

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <bookstore>
    
    <book category="children">
      <title lang="en">Harry Potter</title> 
      <author>J K. Rowling</author> 
      <year>2005</year> 
      <price>29.99</price> 
    </book>
    
    <book category="cooking">
      <title lang="en">Everyday Italian</title> 
      <author>Giada De Laurentiis</author> 
      <year>2005</year> 
      <price>30.00</price> 
    </book>
    
    <book category="web">
      <title lang="en">Learning XML</title> 
      <author>Erik T. Ray</author> 
      <year>2003</year> 
      <price>39.95</price> 
    </book>
    
    <book category="web">
      <title lang="en">XQuery Kick Start</title> 
      <author>James McGovern</author> 
      <author>Per Bothner</author> 
      <author>Kurt Cagle</author> 
      <author>James Linn</author> 
      <author>Vaidyanathan Nagarajan</author> 
      <year>2003</year> 
      <price>49.99</price> 
    </book>
    
    </bookstore>

    第一个 <book> 节点有四个节点:<title>, <author>, <year> 以及 <price>,其中每个节点都包含一个文本节点,"Harry Potter", "J K. Rowling", "2005" 以及 "29.99"。

    注意文本存储在文本几点当中

    在这个例子中:<year>2005</year>,元素节点 <year>,拥有一个值为 "2005" 的文本节点。

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

    在上面的 XML 中,<title> 元素是 <book> 元素的第一个子节点,而 <price> 元素是 <book> 元素的最后一个子节点。

    此外,<book> 元素是 <title>、<author>、<year> 以及 <price> 元素的父节点。

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

    解析器把 XML 读入内存,并把它转换为可被 JavaScript 访问的 XML DOM 对象。

    所有的解析器都含有遍历 XML 树、访问、插入及删除节点的函数。

    js

    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");//微软的 XML 解析器
    /*
    xmlDoc= document.implementation.createDocument("","",null); //在 Firefox 及其他浏览器中的 XML 解析器
    */
    xmlDoc.async="false";
    xmlDoc.load("books.xml");   //loadXML() 方法用于加载字符串(文本),而 load() 用于加载文件。
    • 第一行创建空的微软 XML 文档对象
    • 第二行关闭异步加载,这样可确保在文档完整加载之前,解析器不会继续执行脚本
    • 第三行告知解析器加载名为 "books.xml" 的文档

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

    例如:

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

    跨浏览器例子

    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)

    出于安全方面的原因,现代的浏览器不允许跨域的访问。

    这意味着,网页以及它试图加载的 XML 文件,都必须位于相同的服务器上。

    假如你打算在自己的网页上使用上面的例子,则必须把 XML 文件放到自己的服务器上。否则,xmlDoc.load() 将产生错误 "Access is denied"。

    XML DOM 含有遍历 XML 树以及访问、插入、删除节点的方法(函数)。

    然后,在访问并处理 XML 文档之前,必须把它载入 XML DOM 对象。

    一些典型的 DOM 属性:

    • x.nodeName - x 的名称
    • x.nodeValue - x 的值
    • x.parentNode - x 的父节点
    • x.childNodes - x 的子节点
    • x.attributes - x 的属性节点

    注释:在上面的列表中,x 是一个节点对象。

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

    注释:在上面的列表中,x 是一个节点对象。

    三个重要的 XML DOM 节点属性是:

    • nodeName
    • nodeValue
    • nodeType

    nodeName 属性规定节点的名称。

    • nodeName 是只读的
    • 元素节点的 nodeName 与标签名相同
    • 属性节点的 nodeName 是属性的名称
    • 文本节点的 nodeName 永远是 #text
    • 文档节点的 nodeName 永远是 #document

    nodeValue 属性规定节点的值。

    • 元素节点的 nodeValue 是 undefined
    • 文本节点的 nodeValue 是文本自身
    • 属性节点的 nodeValue 是属性的值

    例子

    <?php
    $doc = new DOMDocument('1.0','utf-8');
    
    $content = file_get_contents('http://feed.cnblogs.com/blog/u/530411/rss');
    
    $doc->loadXML($content);
    
    $ts = $doc->getElementsByTagName('entry');
    $arr=array();
    ///*获取内容 原文链接 作者姓名 摘要 修改时间*/
    foreach ($ts as $value) {
               //链接
             $writer= '作者'.$value->getElementsByTagName('author')->item(0)->childNodes->item(1)->nodeValue.'<br/>';
             $import='文章摘要'.$value->getElementsByTagName('content')->item(0)->textContent.'<br/>';
             $pushtime='发布时间'.$value->getElementsByTagName('published')->item(0)->textContent;
    $arr[]=array(
    'writer'=>$writer,
    'import'=>$import,
    'pushtime'=>$pushtime
    
    );
    }
    
    print_r($arr);

    在 XML DOM 中,节点的关系被定义为节点的属性:

    • parentNode
    • childNodes
    • firstChild
    • lastChild
    • nextSibling
    • previousSibling

    节点操作:

    获取属性值

     txt=xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");

    在 DOM 中,每种成分都是节点。元素节点没有文本值。

    元素节点的文本存储在子节点中。该节点称为文本节点。

    获取元素文本的方法,就是获取这个子节点(文本节点)的值。

    设置属性值 

    x[0].setAttribute("category","child");
    //设置节点的某个属性的值
    y=x.getAttributeNode("category");
    //现获取该属性 设置属性 y.nodeValue="child";
  • 相关阅读:
    怎么在java 8的map中使用stream
    在java 8 stream表达式中实现if/else逻辑
    Lambda表达式最佳实践
    java并发Exchanger的使用
    java中functional interface的分类和使用
    java 8 Streams简介
    一篇文章让你彻底弄懂SSL/TLS协议
    基于口令的密码(PBE)
    更加安全的密钥生成方法Diffie-Hellman
    有关密钥的最全总结都在这了
  • 原文地址:https://www.cnblogs.com/webcyh/p/11287872.html
Copyright © 2020-2023  润新知