资讯专栏INFORMATION COLUMN

高程3总结#第19章E4X

DandJ / 2428人阅读

摘要:在不给这个方法传递参数的情况下,它会返回所有后代节点与使用相同,而传递一个名称作为参数则可以限制结果。,表示解析器应该忽略标记中的处理指令。数据序列化相关的设置,表示在序列化时,每次缩进的空格数量。

E4X E4X的类型

E4X定义了几个新的全局类型

XML,XML结构中的任何一个独立的部分

XMLList,XML对象的集合

Namespace,命名空间前缀与命名空间URI之间的映射

QName,由内部名称和命名空间URI组成的一个限定名

XMl类型

创建XML对象的方式不止一种,第一种方式是像下面这样调用其构造函数

var x=new XML();

这行代码会创建一个空的XML对象,我们能够向其中添加数据,也可以向构造函数中传入一个XML字符串

var x = new XML("Nicholas " + "Zakas");

使用XML字面量将XML数据直接指定给一个变量,XML字面量就是嵌入到JavaScript代码中的XML代码

var employee = Nicholas C. Zakas;

XMLList类型

XMLList类型表现XML对象的有序集合,XMLList的DOM对等类型是NodeList,但与Node和NodeList之间的区别相比,XML和XMLList之间的区别是有意设计的比较小的

var list=new XMLList();

与XML构造函数一样,也可以向其中传入一个待解析的XML字符串,这个字符串可以不止包含一个文档元素

var list=new XMLList("");

还可以使用加号操作符来组合两个或多个XML对象,从而创建XMLList对象

var list=+;

同样的组合操作也可以使用特殊的<>和语法来完成,此时不适用加号操作符

var list=<>

Namespace类型

要创建Namespace对象,可以像下面这样使用Namespace构造函数

var ns=new Namespace();

而传入URI或前缀加URI,就可以初始化Namespace对象

var ns = new Namespace("http://www.wrox.com/"); //没有前缀的命名空间
var wrox = new Namespace("wrox", "http://www.wrox.com/"); //wrox 命名空间

可以使用prefix和uri属性类取得Namespace对象中的信息

alert(ns.uri); //"http://www.wrox.com/"
alert(ns.prefix); //undefined
alert(wrox.uri); //"http://www.wrox.com/"
alert(wrox.prefix); //"wrox"

QName类型

向QName构造函数中传入名称或Namespace对象和名称,可以手工创建新的QName对象

var wrox = new Namespace("wrox", "http://www.wrox.com/");
var wroxMessage = new QName(wrox, "message"); //表示"wrox:message"

创建QName对象之后,可以访问它的两个属性,uri和localName,其中uri属性返回在创建对象时指定的命名空间URI,而localName属性返回限定名中的内部名称

alert(wroxMessage.uri); //"http://www.wrox.com/"
alert(wroxMessage.localName); //"message"

一般用法 访问特性

访问特性可以使用点语法,为了区分特性名与子元素的标签名,必须在名称前面加上一个@字符

var employees = 
    
      Nicholas C. Zakas


  Jim Smith

;
alert(employees.employee[0].@position); //"Software Engineer"

其他节点类型

默认情况下,E4X不会解析注释或处理指令,因此这些部分不会出现在最终的对象层次中,如果想让解析器解析这些部分,可以设置XML构造函数的两个属性

XML.ignoreComments = false;
XML.ignoreProcessingInstructions = false;

设置了两个属性之后,E4X就会将注释和处理指令解析到XML结构中

使用nodeKind()方法可以得到XML对象表示的类型,该访问可能会返回"text"、"element"、"comment"、"processinginstruction"、"attribute"

只取得特定类型的节点

attribute(),返回XML对象的所有特性

comments(),返回XML对象的所有子注释节点

elements(),返回XML对象的所有子元素,可以通过提供元素的tagName来过滤想要的返回的结果

processingInstructions(),返回XML对象的所有处理指令,可以通过提供处理指令的name来过滤想要的返回的结果

text(),返回XML对象的所有文本子节点

使用 hasSimpleContent() 和 hasComplexContent() 方法,可以确定 XML 对象中是只包含文本,还是包含更复杂的内容。如果 XML 对象中只包含子文本节点,则前一个方法会返回 true ;如果 XML 对象的子节点中有任何非文本节点,则后一个方法返回 true 。

alert(employees.employee[0].hasComplexContent()); //true
alert(employees.employee[0].hasSimpleContent()); //false
alert(employees.employee[0].name.hasComplexContent()); //false
alert(employees.employee[0].name.hasSimpleContent()); //true

查询

同样的查询可以使用 descendants() 方法来完成。在不给这个方法传递参数的情况下,它会返回所有后代节点(与使用 ..* 相同),而传递一个名称作为参数则可以限制结果。

var allDescendants = employees.descendants(); //所有后代节点
var allNames = employees.descendants("name"); //后代中的所有元素

还可以取得所有后代元素中的所有特性,方法是使用下列任何一行代码。

var allAttributes = employees..@*; //取得所有后代元素中的所有特性
var allAttributes2 = employees.descendants("@*"); //同上

与限制结果中的后代元素一样,也可以通过用完整的特性名来替换星号达到过滤特性的目的。

var allAttributes = employees..@position; //取得所有 position 特性
var allAttributes2 = employees.descendants("@position"); //同上

构建和操作XML

使用花括号,可以将JavaScript变量嵌入到字面量中的任意位置

var tagName = "color";
var color = "red";
var xml = <{tagName}>{color};
alert(xml.toXMLString()); //"red

类似DOM的方法

appendChild(child),将给定的 child 作为子节点添加到 XMLList 的末尾。

copy(),返回 XML 对象副本。

insertChildAfter(refNode, child),将 child 作为子节点插入到 XMLList 中 refNode 的后面。

insertChildBefore(refNode, child),将 child 作为子节点插入到 XMLList 中 refNode 的前面。

prependChild(child),将给定的 child 作为子节点添加到 XMLList 的开始位置。

replace(propertyName, value),用 value 值替换名为 propertyName 的属性,这个属性可能是一个元素,也可能是一个特性。

setChildren(children),用 children 替换当前所有的子元素, children 可以是 XML 对象,也可是 XMLList 对象。

var employees = 
    
      Nicholas C. Zakas


  Jim Smith

;
employees.appendChild(
                      Benjamin Anderson
                      );
                      employees.prependChild(
                      Michael Johnson
                      );
                      employees.insertChildBefore(employees.child(2),
  
    Margaret Jones
);
employees.setChildren(
                      Richard McMichael
                       +
                      
                      Rebecca Smith
                      );

解析和序列化

与XML解析相关的设置有三个

ignoreComments,表示解析器应该忽略标记中的注释。默认设置为 true 。

ignoreProcessingInstructions,表示解析器应该忽略标记中的处理指令。默认设置为 true 。

ignoreWhitespace ,表示解析器应该忽略元素间的空格,而不是创建表现这些空格的文本节点。默认设置为 true 。

XML数据序列化相关的设置

prettyIndent ,表示在序列化 XML 时,每次缩进的空格数量。默认值为 2。

prettyPrinting,表示应该以方便人类认读的方式输出 XML,即每个元素重起一行,而且子元素都要缩进。默认设置为 true 。

命名空间

通过使用setNamespace()并传入Namespace对象,也可以给定元素设置命名空间

var messages = 
    Hello world!
;
messages.setNamespace(new Namespace("wrox", "http://www.wrox.com/"));

其他变化

引入了for-each-in循环,以便迭代遍历每一个属性并返回属性的值

var employees = 
    
      Nicholas C. Zakas


  Jim Smith

;
for each (var child in employees){
  alert(child.toXMLString());
}

前面启用E4X

要想完整地启用E4X,需要将

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98034.html

相关文章

  • JS学习笔记(19)(E4X

    摘要:的类型类型创建对象的方法调用构造函数使用字面量将数据直接指定给一个变量。表示解析器应该忽略标记中的处理指令。这三个设置会影响对传入到构造函数中的字符串以及字面量的解析。 showImg(https://segmentfault.com/img/bVbvHVV?w=737&h=593); 1、E4X的类型 1.1 XML类型 1、创建XML对象的方法: (1)调用构造函数: var x ...

    lijinke666 评论0 收藏0
  • 高程3总结#3基本概念

    摘要:基本概念语法区分大小写,中的一切变量函数名和操作符都区分大小写。要将一个值转换成对应的值,可以调用类型包括整数和浮点数值,基本数值字面量格式是十进制整数,除了十进制外还有八进制十六进制。八进制第一位必须是,十六进制第一位必须是。 基本概念 语法 区分大小写,ECMAScript中的一切(变量、函数名和操作符)都区分大小写。函数名不能使用typeof,因为它是一个关键字,但typeOf...

    Rindia 评论0 收藏0
  • 高程3总结#8BOM

    摘要:对象的核心对象是,它表示浏览器的一个实例。而和则表示该容器中页面视图区的大小。在中,与返回相同的值,即视口大小而非浏览器窗口大小。第三个参数是一个逗号分隔的设置字符串,表示在新窗口中都显示哪些特性。这应该是用户打开窗口后的第一个页面 BOM window对象 BOM的核心对象是window,它表示浏览器的一个实例。在浏览器中,window对象有双重角色,它既是通过JavaScript访...

    MASAILA 评论0 收藏0
  • 高程3总结#7函数表达式

    摘要:匿名函数可以用来模仿块级作用域来避免这个问题这里是块级作用域代码定义并立即调用了一个匿名函数,将函数声明包含在一对圆括号中,表示它实际上是一个函数表达式,而紧随其后的另一对圆括号会立即调用这个函数。 函数表达式 递归 递归函数是在一个函数通过名字调用自身的情况下构成的 function factrial(num){ if(num

    sevi_stuo 评论0 收藏0
  • 高程3总结#1JavaScript简介

    摘要:简介简史诞生于年,当时主要负责表单的输入验证。实现一个完整的由三部分组成核心文档对象模型浏览器对象模型就是对实现该标准规定的各个方面内容的语言的描述。把整个页面映射为一个多层节点结构。由万维网联盟规划。主要目标是映射文档的结构。 JavaScript简介 JavaScript简史 JavaScript诞生于1995年,当时主要负责表单的输入验证。 如果没有表单验证的功能,填入信息之...

    betacat 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<