热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

疯狂XML学习笔记(6)-----------XML拓展

有关XML的基础知识以及格式要求在这里就不在赘述以下是对XML基础的总结
有关XML的基础知识以及格式要求在这里就不在赘述

以下是对XML基础的总结

初识

#

基础

#

下面是对XML的拓展包括 XML属性、验证


XML 元素可以在开始标签中包含属性,类似 HTML。

属性 (Attribute) 提供关于元素的额外信息。

XML 属性

从 HTML,你会回忆起这个:。"src" 属性提供有关 元素的额外信息。

在 HTML 中(以及在 XML 中),属性提供有关元素的额外信息:


属性通常提供不属于数据组成部分的信息。在下面的例子中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:

computer.gif

XML 属性必须加引号

属性值必须被引号包围,不过单引号和双引号均可使用。比如一个人的性别,person 标签可以这样写:

或者这样也可以:

注释:如果属性值本身包含双引号,那么有必要使用单引号包围它,就像这个例子:

或者可以使用实体引用:

XML 元素 vs. 属性

请看这些例子:


  Anna
  Smith
 


  female
  Anna
  Smith

在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。

没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用子元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。

我最喜欢的方式

下面的三个 XML 文档包含完全相同的信息:

第一个例子中使用了 date 属性:


George
John
Reminder
Don't forget the meeting!

第二个例子中使用了 date 元素:


08/08/2008
George
John
Reminder
Don't forget the meeting!

第三个例子中使用了扩展的 date 元素(这是我的最爱):



  08
  08
  2008

George
John
Reminder
Don't forget the meeting!

避免 XML 属性?

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

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

不要做这样的蠢事(这不是 XML 应该被使用的方式):


针对元数据的 XML 属性

有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 ID 属性是一样的。这个例子向我们演示了这种情况:


  
    George
    John
    Reminder
    Don't forget the meeting!
  
  
    John
    George
    Re: Reminder
    I will not
   

上面的 ID 仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。

在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

XML验证


拥有正确语法的 XML 被称为“形式良好”的 XML。

通过某个 DTD 进行了验证的 XML 是“合法”的 XML。

形式良好的 XML 文档

一个"形式良好"的 XML 文档拥有正确的语法。

一个"形式良好"的 XML 文档会遵守前几章介绍过的 XML 语法规则:



George
John
Reminder
Don't forget the meeting!

验证 XML 文档

一个合法的 XML 文档是"形式良好"的 XML 文档,同样遵守文档类型定义 (DTD) 的语法规则:


George
John
Reminder
Don't forget the meeting!

在上例中,DOCTYPE 声明是对外部 DTD 文件的引用。下面的段落展示了这个文件的内容。

XML DTD

DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:

  
  
  
  
]>

有关DTD的总结:

#

XML Schema




  
    
    
    
    
  


一个通用的验证器

XML 错误会终止您的程序

XML 文档中的错误会终止你的 XML 程序。

W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML 软件应当轻巧,快速,具有良好的兼容性。

如果使用 HTML,创建包含大量错误的文档是有可能的(比如你忘记了结束标签)。其中一个主要的原因是 HTML 浏览器相当臃肿,兼容性也很差,并且它们有自己的方式来确定当发现错误时文档应该显示为什么样子。

使用 XML 时,这种情况不应当存在。

对您的 XML 进行语法检查 - 仅用于 IE 浏览器

为了帮助您对 XML 进行语法检查,我们创建了一个 XML 验证器。

把您的 XML 粘贴到下面的文本框中,然后点击"验证"按钮来进行语法检查。

根据 DTD 来验证 XML

只要把 DOCTYPE 声明添加到您的 XML 中,然后点击验证按钮即可:

注释:只有在 Internet Explorer 中,可以根据 DTD 来验证 XML。Firefox, Mozilla, Netscape 以及 Opera 做不到这一点。

如何将XML显示在Html上:

实例

在 HTML 中显示数据

在上一节中,我们讲解了如何通过 Javascript 来解析 XML 并访问 DOM。

本例遍历一个 XML 文件 (cd_catalog.xml),然后把每个 CD 元素显示为一个 HTML 表格行:






例子解释:

  1. 检测浏览器,然后使用合适的解析器来加载 XML

  2. 创建一个 HTML 表格(

  3. 使用 getElementsByTagName() 来获得所有 XML 的 CD 节点

  4. 针对每个 CD 节点,把 ARTIST 和 TITLE 中的数据显示为表格数据

  5. 结束表格

XMLHttpRequest

什么是 XMLHttpRequest 对象?

XMLHttpRequest 对象是开发者的梦想,因为您能够:

所有现代的浏览器都支持 XMLHttpRequest 对象。

实例:当键入文本时与服务器进行 XML HTTP 通信

创建 XMLHttpRequest 对象

通过一行简单的 Javascript 代码,我们就可以创建 XMLHttpRequest 对象。

在所有现代浏览器中(包括 IE 7):

xmlhttp=new XMLHttpRequest()

在 Internet Explorer 5 和 6 中:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

实例

TIY

注释:onreadystatechange 是一个事件句柄。它的值 (state_Change) 是一个函数的名称,当 XMLHttpRequest 对象的状态发生改变时,会触发此函数。状态从 0 (uninitialized) 到 4 (complete) 进行变化。仅在状态为 4 时,我们才执行代码。

为什么使用 Async=true ?

我们的实例在 open() 的第三个参数中使用了 "true"。

该参数规定请求是否异步处理。

True 表示脚本会在 send() 方法之后继续执行,而不等待来自服务器的响应。

onreadystatechange 事件使代码复杂化了。但是这是在没有得到服务器响应的情况下,防止代码停止的最安全的方法。

通过把该参数设置为 "false",可以省去额外的 onreadystatechange 代码。如果在请求失败时是否执行其余的代码无关紧要,那么可以使用这个参数。

XML实例:

XML 文档实例

请看下面这个 XML 文档 ( "cd_catalog.xml" ),它描述了一个 CD 目录:



  
    
    Bob Dylan
    USA
    Columbia
    10.90
    1985
  
.
.
... more ...
.

加载 XML 文档

为了加载 XML 文档 (cd_catalog.xml),我们使用了与 XML 解析器那一节中相同的代码:

var xmlDoc;
if (window.ActiveXObject)
  {  // code for IE
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
else if (document.implementation.createDocument)
  {  // code for Firefox, Mozilla, Opera, etc.
  xmlDoc=document.implementation.createDocument("","",null);
  }
else
  {
  alert('Your browser cannot handle this script');
  }
xmlDoc.async=false;
xmlDoc.load("cd_catalog.xml");

在本代码执行后,xmlDoc 成为一个 XML DOM 对象,可由 Javascript 访问。

把 XML 数据显示为 HTML 表格

以下代码使用来自 XML DOM 对象的数据来填充一个 HTML 表格:

document.write("");

var x=xmlDoc.getElementsByTagName("CD");
for (var i=0;i");
document.write("");

document.write("");
document.write("");
}
document.write("
"); document.write( x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue); document.write(""); document.write( x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue); document.write("
");

针对 XML 文档中的每个 CD 元素,会创建一个表格行。每个表格行包含两个表格数据单元,其中的数据来自当前 CD 元素的 ARTIST 和 TITLE。

在任意 HTML 元素中显示 XML 数据

XML 数据可以拷贝到任何有能力显示文本的 HTML 元素。

下面的代码为 HTML 文件的 部分。这段代码从第一个 元素中获得 XML 数据,然后在 id="show" 的 HTML 元素中显示数据:

var x=xmlDoc.getElementsByTagName("CD");
i=0;

function display()
{
artist=
(x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue);
title=
(x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue);
year=
(x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue);

txt="Artist: "+artist+"
Title: "+title+"
Year: "+year; document.getElementById("show").innerHTML=txt; }

HTML 的 body 元素包含一个 onload 事件属性,它的作用是在页面已经加载时调用 display() 函数。body 元素中还包含了供接受 XML 数据的

元素。

通过上例,你只能看到来自 XML 文档中第一个 CD 元素中的数据。为了导航到数据的下一行,必须添加更多的代码。

添加导航脚本

为了向上例添加导航(功能),需要创建 next() 和 previous() 两个函数:

function next()
{
if (i0)
  {
  i--;
  display();
  }
}

next() 函数确保已到达最后一个 CD 元素后不显示任何东西,previous () 函数确保已到达第一个 CD 元素后不显示任何东西。

通过点击 next/previous 按钮来调用 next() 和 previous() 函数:


以上就是疯狂XML学习笔记(6)-----------XML拓展的内容,更多相关内容请关注PHP中文网(www.php1.cn)!

推荐阅读
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 前言对于从事技术的人员来说ajax是这好东西,都会使用,而且乐于使用。但对于新手,开发一个ajax实例,还有是难度的,必竟对于他们这是新东西。leo开发一个简单的ajax实例,用的是 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
author-avatar
MichaelZhu
互联网初创企业,海外项目
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有