【译】用jQuery 处理XML--浏览器中的XML与JavaScript

 

用jQuery 处理XML--写在前面的话

用jQuery 处理XML-- DOM(文本对象模型)简介

用jQuery 处理XML--浏览器中的XML与JavaScript

用jQuery 处理XML-- jQuery与XML

 

原文:Processing XML with jQuery

来自IBM Developer Works

 

浏览器中的XML与JavaScript

 

在处理XML前,你需要在JavaScript中获取它。这一部分展示了一些不同的方法用来在JavaScript中获取XML并且对它进行处理。

 

XML的节点类型

 

在我们研究如何处理XML前,先来了解下XML中不同的节点及类型。如果是HTML,了解这些节点就没必要了,但由于XML的可扩展性和结构的不确定性,了解这些固有节点类型就显得犹为重要了。

 

下面是XML 中12种不同的节点(表格取自W3School中文站点):

 


节点类型


描述


Document


表示整个文档(DOM 树的根节点)


DocumentFragment


表示轻量级的 Document 对象,其中容纳了一部分文档。


DocumentType


向为文档定义的实体提供接口。


ProcessingInstruction


表示处理指令。


EntityReference


表示实体引用元素。


Element


表示 element(元素)元素


Attr


表示属性。


Text


表示元素或属性中的文本内容。


CDATASection


表示文档中的 CDATA 区段(文本不会被解析器解析)


Comment


表示注释。


Entity


表示实体。


Notation


表示在 DTD 中声明的符号。

 

妳可以使用JavaScript来获取一个节点并检查它的类型。清单13中的代码返回真如果传入的节点类型为Comment,否则返回假。这里的代码还不涉及jQuery,但在后面探索XML的节点值的时候会用到。

Listing 13. JavaScript function for determining if the node element is a comment


 

<script type="text/javascript">

function isNodeComment(node){

return (node.nodeType===8);

}

</script>

 

这里并不对每个节点类型做具体介绍,但熟悉这些节点对于处理它和它其中的值至关重要。

 

在客户端用JavaScript处理XML

 

之前例子中用来处理HTML的代码大部分都可以直接拿来处理XML;需要注意的一点是,XML中不能依赖id属性来处理一个节点了,需要使用节点名字这种更通俗的方法来进行。另外,在进行XML处理时,节点名字的大小是敏感的。

假设我们要处理的XML如下面清单14这个样子。

 

Listing 14. A simple XML file


 

<?xml version="1.0" encoding="UTF-8" ?>

<item content_id="1" date_published="2010-05-25">

<description></description>

<body></body>

<related_items>

<related_item content_id="2"></related_item>

<related_item content_id="3"></related_item>

</related_items>

</item>

 

在JavaScript中获取XML

 

要处理清单14中的XML,首先要做的事情就是在JavaScript中取得它。有很多方法可以做到这点:

  1. 在服务器端将XML转成字符串类型传到JavaScript
  2. 在服务器端将XML 与一个textarea 控件进行绑定
  3. 通过Ajax将XML装载进浏览器

每种方法的详细步骤如下:

  1. 在服务器端将XML转成字符串类型传到JavaScript

通过一种服务器端编程语言,可以将XML 转成字符串放到一个JavaScript变量中。这种方法不是最优雅也不是最特别的,但它确实有用。但这种方法有个优点就是妳可以从任何地方加载XML文件,甚至是本地服务器(见清单15)。

Listing 15. Writing XML into a JavaScript variable from PHP


 

<?php

$xmlPath = "/path/to/file.xml"; // or http://www.somedomain.com/path/to/file.xml

$xmlFile = file_get_contents($xmlPath);

?>

<script type="text/javascript">

var xmlString = "<?=$xmlFile?>";

</script>

 

 

  1. 在服务器端将XML 与一个textarea 控件进行绑定

另外一种稍微有点区别的方法是将XML装载进一个<textarea> (这个元素可以不在展示)。然后通过之前提到过的innerHTML 来获取XML 字符串然后放到JavaScript中。

妳可以把这个包含了XML的PHP变量放到一个id为"xml"的<textarea>标签中,之后可以通过这个id方便地获取它:

<textarea id="xml"><?=$xmlFile?></textarea>

然后就可以方便地将XML从这个HTML元素中取出来放到JavaScript中进行操作了(见清单16)。

Listing 16. Exposing XML to JavaScript from a textarea element


 

<script type="text/javascript">

var xmlString = document.getElementById("xml").innerHTML;

</script>

 

考虑浏览器兼容性,使用清单17中的方法来从XML字符串创建DOM。

Listing 17. Cross-browser JavaScript function for converting an XML string into a DOM object


 

<script type="text/javascript">

/**

* Converts passed XML string into a DOM element.

* @param xmlStr {String}

*/

function getXmlDOMFromString(xmlStr){

if (window.ActiveXObject && window.GetObject) {

         // for Internet Explorer

var dom = new ActiveXObject('Microsoft.XMLDOM');

dom.loadXML(xmlStr);

return dom;

}

if (window.DOMParser){ // for other browsers

return new DOMParser().parseFromString(xmlStr,'text/xml');

}

throw new Error( 'No XML parser available' );

}

 

var xmlString = document.getElementById("xmlString").innerHTML;

var xmlData = getXmlDOMFromString(xmlString);

</script>

 

下面看下逆过程,也就是从XML DOM中返回XML字符串(见清单18)。

Listing 18. Cross-browser JavaScript function for returning a string representation of an XML DOM object


 

<script type="text/javascript">

/**

* Returns string representation of passed XML object

*/

function getXmlAsString(xmlDom){

return (typeof XMLSerializer!=="undefined") ?

(new window.XMLSerializer()).serializeToString(xmlDom) :

xmlDom.xml;

}

</script>

 

 

  1. 通过Ajax将XML装载进浏览器

 

最后种在JavaScript中获取XML的方法是通过Ajax。详见后面关于jQuery的部分。

 

JavaScript中处理XML

 

让我们看看之前提到的一些标准的JavaScript方法如果应用到XML上。要获得当前条目的description字段和相关条目的id,可以通过清单19的代码实现。

 

Listing 19. XML Processing using JavaScript


 

<script type="text/javascript">

// get value of single node

var descriptionNode = xmlData.getElementsByTagName("description")[0];

var description

= descriptionNode.firstChild && descriptionNode.firstChild.nodeValue;

 

// get values of nodes from a set

var relatedItems = xmlData.getElementsByTagName("related_item");

// xmlData is an XML doc

var relatedItemVals = [];

var tempItemVal;

for (var i=0,total=relatedItems.length; i<total; i++){

tempItemVal = relatedItems[i].firstChild ? relatedItems[i].firstChild.nodeValue : "";

relatedItemVals.push(tempItemVal);

}

 

// set and get attribute of a node

description.setAttribute("language", "en");

description.getAttribute("language"); // returns "en"

</script>

 

仔细看上面的代码。getElementsByTagName()这个之前也见过的方法对于处理XML埋深重要,因为它让妳可以获取到给定名称的XML元素。(需要再次重申的是在处理XML时大小写是敏感的)。然后再检查一下descriptionNode 是否包含子节点就可以安全地返回description 的值了。如果有子节点,那么就可以访问nodeValue获取值。当妳想要获取某个特定节点的文本值时,事情变得有点难了。虽然某些浏览器支持在XML中使用之前提到的innerHTML属性,但大多数不支持。所以妳需要首先检查下它是否包含firstChild (文本节点textNode,注释节点comment ,子节点child node),如果有才可以访问nodeValue。上面的代码中,如果检查到不存在子节点则返回空字符串。

 

最后,妳看到,setAttribute() 和 getAttribute()方法的使用完全和在HTML中一样。

 

到这里妳已经见识了如何使用原始的JavaScript代码来处理HTML和XML节点。下一节中引入jQuery,妳将会看到这个库有多强大威武,不仅简化了处理流程而且使妳对DOM的操作更得心应手。

 

 

时间: 2024-09-30 16:08:34

【译】用jQuery 处理XML--浏览器中的XML与JavaScript的相关文章

使用jQuery在浏览器中处理XML

XML 是 Web 的 SGML,但是它还没有像 XML 社区那样在 Web 上引人注目.XML 在 Web 上最突出的成就 -- XHTML -- 已经被政治和委员会设计所纠缠,并且其他雄心壮志.技术良好的规范 -- 例如 XForms 和 SVG -- 一直受到低使用率的困扰.有时候 XML 会在意想不到的方面在 Web 上获得成功,包括 XML 格式的 Web 提要(例如 RSS 类型和 Atom)的流行. 常用缩略词 Ajax:异步 JavaScript + XML API:应用程序编程

[译] 使用开发者工具在浏览器中调整设计

本文讲的是[译] 使用开发者工具在浏览器中调整设计, 原文地址:Using DevTools to Tweak Designs in the Browser 原文作者:AHMAD SHADEED 译文出自:掘金翻译计划 译者:bambooom 校对者:gy134340 / avocadowang 使用开发者工具在浏览器中调整设计 让我们来看看使用浏览器的开发者工具做设计工作的几种方式.你会发现一些很方便的隐藏技巧. 使用复选框切换类名 当你在从不同的选择中挑选一个设计时,或者在不手动添加类名的时

浏览器中捕获和分析javascript错误捕获经

对于javascript的出错,例如xxx undefined,SyntaxError等,我们是再熟悉不过的了,本文我们来讨论关于javascript出错如何捕获. 我们team将出现错误的javascript代码取名为badjs,也有一个开源的badjs项目,用于捕获和分析js错误,并提供了一些基础的报表数据分析. 捕获错误一般有两种方式:     使用window.onerror()捕获全局的js错误信息    使用try{...}catch(e){...}包裹需要执行的代码,获取error

浏览器中url存储的JavaScript实现_基础知识

现在的浏览器里,有一个十分有趣的功能,你可以在不刷新页面的情况下修改浏览器URL;在浏览过程中.你可以将浏览历史储存起来,当你在浏览器点击后退按钮的时候,你可以冲浏览历史上获得回退的信息,这听起来并不复杂,是可以实现的,我们来编写些代码.来看看它是如何工作的. var stateObject = {}; var title = "Wow Title"; var newUrl = "/my/awesome/url"; history.pushState(stateOb

Microsoft SQL Server 2005 中的 XML 支持(1)

本文探讨 SQL Server 2005 中内置的 XML 支持.描述了这种支持如何与 .NET 框架 V2.0 和本机代码(例如 OLEDB 和 SQLXML)均支持的客户端编程相集成. 一.简介 可扩展标记语言 (XML) 作为一种与平台无关的数据表示形式已被广泛采用.它对于在松散耦合且完全不同的系统,以及各种企业到企业 (B2B) 应用和工作流范畴内交换信息是很有用的.数据交换已成为 XML 技术的主要驱动力之一.. XML 在企业应用程序中的使用正日益广泛,它主要用于对半结构化和非结构化

Microsoft SQL Server 2005 中的 XML 选项

本文介绍 Visual Studio 2005/SQL Server 2005 环境中用于处理 XML 数据的三个选项,包括使用方案以及指导用户在各选项之间进行选择的指南. 一.System.Xml.SQLXML 和 XML 数据类型简介 本节简要介绍 Microsoft SQL Server 2000 中提供的 XML 支持的发展历史,并概要介绍 Microsoft Visual Studio 2005/SQL Server 2005 环境中提供的用于处理 XML 和关系数据的三个选项.这三个

浏览器中因cookie设置HttpOnly标志引起的安全问题

1.简介如果cookie设置了HttpOnly标志,可以在发生XSS时避免JavaScript读取cookie,这也是HttpOnly被引入的原因.但这种方式能防住攻击者吗?HttpOnly标志可以 防止cookie被"读取", 那么能不能防止被"写"呢?答案是否定的,那么这 里面就有 文章可做了,因为已证明有些浏览器的HttpOnly标记可以被JavaScript写入覆盖,而这种覆盖可能被攻击者利用发动session fixation攻击.本文主题就是讨论这种技术

在Ruby中处理XML和XSLT以及XPath的简单教程_ruby专题

什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言. 它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据. XML解析器结构和API XML的解析器主要有DOM和SAX两种.     SAX解析器是基于事件处理的,需要从头到尾把XML文档扫描一遍

在浏览器中获取当前执行的脚本文件名的代码_javascript技巧

背景 同事提了一个问题,如何在浏览器中动态插入的 JavaScript 文件中,获取当前文件名? 除了服务器输出一个文件名外,在脚本中获取应该只有下面三种做法. 解法A 普遍的解法,只能用于页面静态scripts标签引入或者单个动态加载. 复制代码 代码如下: var scripts = document.getElementsByTagName('script'); var filename = scripts[scripts.length -1].src; 动态插入多个脚本标签的情况: 复制