From a065e04d529da1d847b5062a12c46d916408bf32 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 21:46:22 -0500 Subject: update based on https://github.com/mdn/yari/issues/2028 --- .../e4x_tutorial/accessing_xml_children/index.html | 111 --------------------- .../descendants_and_filters/index.html | 27 ----- files/zh-cn/archive/web/e4x_tutorial/index.html | 39 -------- .../web/e4x_tutorial/introduction/index.html | 64 ------------ .../archive/web/e4x_tutorial/namespaces/index.html | 33 ------ .../e4x_tutorial/the_global_xml_object/index.html | 55 ---------- 6 files changed, 329 deletions(-) delete mode 100644 files/zh-cn/archive/web/e4x_tutorial/accessing_xml_children/index.html delete mode 100644 files/zh-cn/archive/web/e4x_tutorial/descendants_and_filters/index.html delete mode 100644 files/zh-cn/archive/web/e4x_tutorial/index.html delete mode 100644 files/zh-cn/archive/web/e4x_tutorial/introduction/index.html delete mode 100644 files/zh-cn/archive/web/e4x_tutorial/namespaces/index.html delete mode 100644 files/zh-cn/archive/web/e4x_tutorial/the_global_xml_object/index.html (limited to 'files/zh-cn/archive/web/e4x_tutorial') diff --git a/files/zh-cn/archive/web/e4x_tutorial/accessing_xml_children/index.html b/files/zh-cn/archive/web/e4x_tutorial/accessing_xml_children/index.html deleted file mode 100644 index 16b4cf8139..0000000000 --- a/files/zh-cn/archive/web/e4x_tutorial/accessing_xml_children/index.html +++ /dev/null @@ -1,111 +0,0 @@ ---- -title: Accessing XML children -slug: Archive/Web/E4X_tutorial/Accessing_XML_children -translation_of: Archive/Web/E4X_tutorial/Accessing_XML_children ---- -

访问 XML 子节点

-

JavaScript 对象通常使用 . 或 [] 来设置性质。

-
var a = {};
-a.foo = 1;
-a["bar"] = 2;
-

在 E4X 中,点(.)和中括号([])操作符用来访问 E4X 元素的子节点。

-
var element1 = <foo>
-                 <bar/>
-               </foo>;
-var element2 = <baz/>;
-element1.bar.appendChild(element2);
-element1["bar"].appendChild(<quux/>);
-

往 element1 中的 bar 节点添加子节点,生成如下 XML 文档:

-

<foo>
-   <bar>
-     <baz/>
-     <quux/>
-   </bar>
- </foo>

-

但是要注意,给一个不存在的子元素赋值会创建这个元素。

-
var element1 = <foo/>
-element1.bar = 1;
-

生成

-

<foo>
-   <bar>1</bar>
- </foo>

-

如果子节点已经存在,点(.)操作符允许你更改它的值。

-
var elem = <foo>
-             <bar>1</bar>
-           </foo>
-elem.bar = 2;
-

会将原来的值 1 改成 2。

-

你可以用 delete 命令删除一个子节点。

-
var elem = <foo>
-             <bar/>
-             <baz/>
-           </foo>
-delete elem.bar;
-

只剩下

-

<foo>
-   <baz/>
- </foo>

-

点(.)操作符还能用于替换特定的子节点。

-
var elem1 = <foo>
-              <bar/>
-            </foo>;
-var elem2 = <red>
-              <blue/>
-            </red>;
-elem1.bar = elem2;
-

用 elem2 的全部内容替换 <bar/> 元素。

-

<foo>
-   <red>
-     <blue/>
-   </red>
- <foo>

-

XML 列表

-

许多时候,一个元素会有两个或多个相同类型的子节点。在这种情况下,访问 foo.bar 将返回一个XML 列表对象,包含所有类型为“bar”的子节点。注意:在使用 . 操作符时,判断它是返回单个元素还是一个 XML 列表,这是你的责任。在返回这些性质时,E4X 的行为并没有区别。

-

XML 列表的行为就像是一个数组。

-
var element = <foo>
-                <bar baz="1">red</bar>
-                <bar baz="2">blue</bar>
-              </foo>;
-var list = element.bar;
-list.length(); // returns 2
-list[0]; // the first bar element
-list[1]; // the second bar element
-
-

需要注意,这个列表时可修改的,在它上面做的修改都会反映到原始的 XML 文档中。

-
list[1] = "green";
-

XML 文档被修改为:

-

<foo>
-   <bar baz="1">red</bar>
-   <bar baz="2">green</bar>
- </foo>

-

特殊类型的节点

-

XML 对象有一些方法可以访问 XML 列表中的通用类型节点。

-
var a = <foo> Some text <bar>not text</bar> More text </foo>;
-var list = a.text();
-list.length(); // returns 2
-list[0]; // returns " Some text "
-list[1]; // returns " More text "
-

你同样可以访问注释节点:

-
XML.ignoreComments = false;
-var a = <foo> Some  <!-- abc --> text </foo>;
-var comments = a.comments();
-alert(comments[0]); // Returns <!-- abc -->
-

星号(*)选择器将返回 XML 列表的所有子节点。

-
var a = <foo>
-          <bar/>
-          <baz/>
-        </foo>;
-var list = a.*;
-list.length(); // returns 2
-
-

元素属性

-

很多 XML 元素都有赋有特定值的属性。例如:

-

<pets>
-   <dog color="brown">Fido</dog>
-   <cat color="grey">Fluffy</cat>
- </pets>

-

E4X 运行你用 .@ 操作符来反问这些特定元素的属性。最基本的情况如下例所示:

-
 var element = <foo bar="1"/>
- element.@bar = 2;
-

它将生成:

-

<foo bar="2"/>

diff --git a/files/zh-cn/archive/web/e4x_tutorial/descendants_and_filters/index.html b/files/zh-cn/archive/web/e4x_tutorial/descendants_and_filters/index.html deleted file mode 100644 index fbf89a871f..0000000000 --- a/files/zh-cn/archive/web/e4x_tutorial/descendants_and_filters/index.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Descendants and Filters -slug: Archive/Web/E4X_tutorial/Descendants_and_Filters -translation_of: Archive/Web/E4X_tutorial/Descendants_and_Filters ---- -

访问后代节点

-

很多时候,你感兴趣的节点往往不是 XML 根节点的子节点,而是嵌套在多层下的后代节点。你可以使用 .. 操作符访问任意深度的节点,或者使用 descendants 性质。例如:

-
var element = <pets>
-                <dogs>
-                  <fido color="red"/>
-		  <spike color="blue"/>
-		</dogs>
-              </pets>;
-element..fido.@color = "green";
-element..spike.@color = "purple";
-
-

两只宠物狗的颜色都做了改变。

-

点(.)操作符的所有规则都适用于 .. 操作符。那就是说,如果有多个请求的类型,就会返回一个 XML 后代的列表。星号(*)选择器会返回 XML 列表的所有后代。

-

过滤器

-

在很多情况下,尤其是用 * 选择器时,你并不想要处理 . 或 .. 操作符返回的所有节点。为了只处理其中特定的子集,可以将筛选条件放到 . 操作符后面的圆括号里。

-
var element = <dogs>
-                <fido color="brown"/>
-                <spike color="black"/>
-                <killer color="brown"/>
-              </dogs>;
-var list = element.*.(@color == "brown");
-

本来,element.* 返回一个包含三只狗的列表。但其中只有 fido 和 killer 的颜色是褐色的。因此,该过来条件创建了一个只包含 fido 和 killer 的列表。

diff --git a/files/zh-cn/archive/web/e4x_tutorial/index.html b/files/zh-cn/archive/web/e4x_tutorial/index.html deleted file mode 100644 index 4dac9ce0e8..0000000000 --- a/files/zh-cn/archive/web/e4x_tutorial/index.html +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: E4X教程 -slug: Archive/Web/E4X_tutorial -translation_of: Archive/Web/E4X_tutorial ---- -

-

下一页 »

-

- -
-

警告:E4X已废弃。 默认情况下,Firefox 16中的内容将禁用它,Firefox 17中的Chrome默认禁用,Firefox 18中将其删除。请使用DOMParser / DOMSerializer或非本机JXON算法。

-
- -

概述

- -

本教程带你走入E4X (EcmaScript for XML)基本语法. 通过使用E4X,程序员可以通过一个类似JavaScript编程的语法来操作XML文档。

- -

科目

- - - -

另请参阅

- - - -

-

下一页 »

-

- -

diff --git a/files/zh-cn/archive/web/e4x_tutorial/introduction/index.html b/files/zh-cn/archive/web/e4x_tutorial/introduction/index.html deleted file mode 100644 index 2c0a2f7a76..0000000000 --- a/files/zh-cn/archive/web/e4x_tutorial/introduction/index.html +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Introduction -slug: Archive/Web/E4X_tutorial/Introduction -tags: - - E4X - - JavaScript - - Tutorial -translation_of: Archive/Web/E4X_tutorial/Introduction ---- -

基本语法

-

如果启用了 E4X,基本的 XML 元素就是有效的语法。例如:

-
var element = <foo/>
-    
-

在开启了 E4X 的浏览器里完全有效。

-

变量的声明也不局限于单个元素,并且和 JavaScript 一样可以扩多行。

-
var element2 = <foo>
-                     <bar/>
-               </foo>
-
-

此外,和一般的 XML 文档一样,你能给一个元素指定属性。

-
var element3 = <foo baz="1"/>
-    
-

操作元素

-

E4X 的目标是为 JavaScript 程序员提供一个简单的方法来操作 XML 文档,而无需通过 DOM 接口。不过,很多你在 DOM 中用过的函数也能用到 E4X 中。最基本的就是 appendChild:

-
var element1 = <foo/>
-var element2 = <bar/>
-element1.appendChild(element2);
-
-

它会产生你期望的正确的 XML 文档:

-

<foo>
-   <bar/>
- </foo>

-

JavaScript 变量

-

当 XML 文档需要和 JavaScript 做紧密交互时,E4X 真正强大的地方才得以彰显。通过特定的语法,我们能将 JavaScript 变量的值赋给 E4X 元素。这是用大括号({})标记。

-
var a = 2;
-var b = <foo>{a}</foo>;
-
-

创建了一段 XML 文档,内容为 <foo>2</foo>。

-

你也可以将大括号标记用于元素的属性(名字或值)。例如:

-
var a = 2;
-var b = 'bar';
-var c = <foo {b}={a}>"hi"</foo>;
-

创建的 XML 稍有不同:<foo bar="2">"hi"</foo>。

-

注意:XML 元素只接受文本作为他们的值。大括号标记真正发生的是调用变量的 toString 方法,并将返回值填到相应位置。例如:

-
var a = {foo: 1};
-var b = <bar>{a}</bar>
-

实际上产生的文档是 <bar>[object Object]</bar>。

-

在内容中使用内联函数

-

虽然大括号限定执行单条语句,但通过匿名函数内联可以执行一些额外的处理:

-
var a = 'foo';
-var b = <bar>{function () {var c = a.toUpperCase(); var d = 5 * 5; return c + d;}()}</bar>
-

上述代码产生:<bar>FOO25</bar>

-

该用法更多的讨论请参加 E4X for templating

-

序列化

-

E4X 最强大的工具就是简单地调用 .toXMLString() 就可以将整个 XML 文档(或其中部分)序列化到字符串中。

-
var element1 = <foo/>;
-var element2 = <bar/>;
-element1.apppendChild(element2);
-element1.toXMLString();
-

输出为:

-

<foo>
-   <bar/>
- </foo>

-

本例使用 toString() 也能达到相同效果,不过在一个只有文本内容的元素上调用 toString() 将之产生文本内容(例如,<foo>abc</foo>.toString(); 会只产生 'abc')。

diff --git a/files/zh-cn/archive/web/e4x_tutorial/namespaces/index.html b/files/zh-cn/archive/web/e4x_tutorial/namespaces/index.html deleted file mode 100644 index 8a2fc96063..0000000000 --- a/files/zh-cn/archive/web/e4x_tutorial/namespaces/index.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Namespaces -slug: Archive/Web/E4X_tutorial/Namespaces -translation_of: Archive/Web/E4X_tutorial/Namespaces ---- -

E4X 与 命令空间

-

通常情况下,XML 文档包含来自多种命令空间的元素。你可以通过声明为你的 E4X 对象设置默认的命名空间。

-
default xml namespace = "http://www.w3.org/1999/xhtml";
-
-

通过重复的声明,你可以随时更改相同范围内 E4X 的命名空间。

-
default xml namespace = "http://www.w3.org/1999/xhtml";
-var a = <p>Some text</p>;
-default xml namespace = "http://www.mozilla.org/keymaster/gat...re.is.only.xul";
-var b = <label>More text</label>;
-a.appendChild(b);
-
-

得出

-

<p xmlns="http://www.w3.org/1999/xhtml">
-   Some text
-   <label xmlns="http://www.mozilla.org/keymaster/gat...re.is.only.xul">More text</label>
- </p>

-

name()

-

在 XML 对象上调用 name() 会返回一个 QName 对象(Qualified Name)。QName 在支持 E4X 的 JavaScript 实现中是一个全局的构造函数。QName 对象有两个特别重要的属性:localName 返回元素的名字,且没有任何命名空间前缀;uri 返回元素所在的命名空间。

-
var info = a.name();
-info.localName; // returns 'p'.
-info.uri; // returns "http://www.w3.org/1999/xhtml"
-

没有在任何命令空间的元素,他们的 uri 是一个空字符串。

-

Namespace 全局构造函数和 QName 非常相似。Namespace 的不同之处是 toString 方法,以及 Namespace 用 prefix 属性来代替 localName 属性[1]

-

关于 E4X 的命名空间,更多的内容请参见 Processing XML with E4X

-

译者注

-
    -
  1. 原文中没有详细讲,获得 Namespace 对象的方法是调用 .namespace()。其中 QName 的 toString 方法会输出 Namespace::name 的形式,而 Namespace 的 toString 只会输出命名空间。
  2. -
diff --git a/files/zh-cn/archive/web/e4x_tutorial/the_global_xml_object/index.html b/files/zh-cn/archive/web/e4x_tutorial/the_global_xml_object/index.html deleted file mode 100644 index 910b422ada..0000000000 --- a/files/zh-cn/archive/web/e4x_tutorial/the_global_xml_object/index.html +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: The global XML object -slug: Archive/Web/E4X_tutorial/The_global_XML_object -translation_of: Archive/Web/E4X_tutorial/The_global_XML_object ---- -

全局 XML 对象

-

E4X-capable JavaScript 引擎在全局对象上放了一个新的属性。XML 对象有许多属性允许你定制解析和序列化 E4X。XML 元素从他们创建开始就记住 XML 对象的设置。

-

扩展 XML.prototype

-

XML.prototype 和 XMLList.prototype(XMLList.prototype 实际上就是 XML.prototype)不能像其他构造器(例如 Object)一样扩展。你只能在 XML.prototype 里定义方法,而不能定义字段。要向 XML.prototype 添加一个方法,则要定义 XML.prototype.function::methodName 或 XML.prototype.funciton::[methodNameString]。下例定义 fooCount() 方法,返回 XML 中 <foo> 元素的个数:

-

 

-
XML.prototype.function::fooCount = function fooCount() {
-  return this..foo.length();
-};
-<foobar><foo/><foo/><foo/></foobar>.fooCount() // returns 3
-

 

-

ignoreComments

-

默认为 true。该属性告诉 E4X 在序列化和筛选时忽略注释节点。即当 ignoreComments 为 ture 时 .comments() 返回空。观察如下例子:

-

 

-
var element = <foo>
-                <!-- my comment -->
-                <bar/>
-              </foo>;
-element.comments().length(); // returns 0
-element.toXMLString(); // returns <foo><bar/></foo>
-XML.ignoreComments = false;
-element = <foo>
-            <!-- my comment -->
-            <bar/>
-          </foo>;
-element.comments().length(); // returns 1
-element.toXMLString(); // returns <foo><!-- my comment --><bar/></foo>
-

 

-

ignoreProcessingInstructions

-

默认为 ture。该属性告诉 E4X 在序列化和筛选时忽略 XML 中的处理指令。例如:

-

 

-
var element = <foo>
-                <?process x="true"?>
-                <bar/>
-                <?process x="false"?>
-              </foo>;
-element.toXMLString(); // returns <foo><bar/></foo>
-XML.ignoreProcessingInstructions = false;
-var element = <foo>
-                <?process x="true"?>
-                <bar/>
-                <?process x="false"?>
-              </foo>;
-element.toXMLString(); // returns <foo><?process x="true"?><bar/><?process x="false"?></foo>
-

 

-

ignoreWhitespace

-

默认为 true。忽略节点之间以及节点文本头尾两端的空白,而其他的则被解析为文本节点或作为文本节点的一部分。

-

prettyPrinting

-

默认是 true。为 true 时,toXMLString() 序列化 E4X 对象时会包含换行和缩进。

-

prettyIndent

-

默认值是 2。代表 XML 树每层缩进的空格数。如果 prettyPrinting 是 false 则忽略。

-- cgit v1.2.3-54-g00ecf