diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/zh-cn/archive/web/e4x_tutorial | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/zh-cn/archive/web/e4x_tutorial')
6 files changed, 329 insertions, 0 deletions
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 new file mode 100644 index 0000000000..16b4cf8139 --- /dev/null +++ b/files/zh-cn/archive/web/e4x_tutorial/accessing_xml_children/index.html @@ -0,0 +1,111 @@ +--- +title: Accessing XML children +slug: Archive/Web/E4X_tutorial/Accessing_XML_children +translation_of: Archive/Web/E4X_tutorial/Accessing_XML_children +--- +<h2 id="访问_XML_子节点">访问 XML 子节点</h2> +<p>JavaScript 对象通常使用 . 或 [] 来设置性质。</p> +<pre class="brush: js">var a = {}; +a.foo = 1; +a["bar"] = 2;</pre> +<p>在 E4X 中,点(.)和中括号([])操作符用来访问 E4X 元素的子节点。</p> +<pre class="brush: js">var element1 = <foo> + <bar/> + </foo>; +var element2 = <baz/>; +element1.bar.appendChild(element2); +element1["bar"].appendChild(<quux/>);</pre> +<p>往 element1 中的 bar 节点添加子节点,生成如下 XML 文档:</p> +<p><code><foo><br> + <bar><br> + <baz/><br> + <quux/><br> + </bar><br> + </foo></code></p> +<p>但是要注意,给一个不存在的子元素赋值会创建这个元素。</p> +<pre class="brush: js">var element1 = <foo/> +element1.bar = 1;</pre> +<p>生成</p> +<p><code><foo><br> + <bar>1</bar><br> + </foo></code></p> +<p>如果子节点已经存在,点(.)操作符允许你更改它的值。</p> +<pre class="brush: js">var elem = <foo> + <bar>1</bar> + </foo> +elem.bar = 2;</pre> +<p>会将原来的值 1 改成 2。</p> +<p>你可以用 delete 命令删除一个子节点。</p> +<pre class="brush: js">var elem = <foo> + <bar/> + <baz/> + </foo> +delete elem.bar;</pre> +<p>只剩下</p> +<p><code><foo><br> + <baz/><br> + </foo></code></p> +<p>点(.)操作符还能用于替换特定的子节点。</p> +<pre class="brush: js">var elem1 = <foo> + <bar/> + </foo>; +var elem2 = <red> + <blue/> + </red>; +elem1.bar = elem2;</pre> +<p>用 elem2 的全部内容替换 <bar/> 元素。</p> +<p><code><foo><br> + <red><br> + <blue/><br> + </red><br> + <foo></code></p> +<h2 id="XML_列表">XML 列表</h2> +<p>许多时候,一个元素会有两个或多个相同类型的子节点。在这种情况下,访问 foo.bar 将返回一个XML 列表对象,包含所有类型为“bar”的子节点。注意:在使用 . 操作符时,判断它是返回单个元素还是一个 XML 列表,这是你的责任。在返回这些性质时,E4X 的行为并没有区别。</p> +<p>XML 列表的行为就像是一个数组。</p> +<pre class="brush: js">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 +</pre> +<p>需要注意,这个列表时可修改的,在它上面做的修改都会反映到原始的 XML 文档中。</p> +<pre class="brush: js">list[1] = "green";</pre> +<p>XML 文档被修改为:</p> +<p><code><foo><br> + <bar baz="1">red</bar><br> + <bar baz="2">green</bar><br> + </foo></code></p> +<h2 id="特殊类型的节点">特殊类型的节点</h2> +<p>XML 对象有一些方法可以访问 XML 列表中的通用类型节点。</p> +<pre class="brush: js">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 "</pre> +<p>你同样可以访问注释节点:</p> +<pre class="brush: js">XML.ignoreComments = false; +var a = <foo> Some <!-- abc --> text </foo>; +var comments = a.comments(); +alert(comments[0]); // Returns <!-- abc --></pre> +<p>星号(*)选择器将返回 XML 列表的所有子节点。</p> +<pre class="brush: js">var a = <foo> + <bar/> + <baz/> + </foo>; +var list = a.*; +list.length(); // returns 2 +</pre> +<p>元素属性</p> +<p>很多 XML 元素都有赋有特定值的属性。例如:</p> +<p><code><pets><br> + <dog color="brown">Fido</dog><br> + <cat color="grey">Fluffy</cat><br> + </pets></code></p> +<p>E4X 运行你用 .@ 操作符来反问这些特定元素的属性。最基本的情况如下例所示:</p> +<pre class="brush: js"> var element = <foo bar="1"/> + element.@bar = 2;</pre> +<p>它将生成:</p> +<p><code><foo bar="2"/></code></p> 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 new file mode 100644 index 0000000000..fbf89a871f --- /dev/null +++ b/files/zh-cn/archive/web/e4x_tutorial/descendants_and_filters/index.html @@ -0,0 +1,27 @@ +--- +title: Descendants and Filters +slug: Archive/Web/E4X_tutorial/Descendants_and_Filters +translation_of: Archive/Web/E4X_tutorial/Descendants_and_Filters +--- +<h2 id="访问后代节点">访问后代节点</h2> +<p>很多时候,你感兴趣的节点往往不是 XML 根节点的子节点,而是嵌套在多层下的后代节点。你可以使用 .. 操作符访问任意深度的节点,或者使用 descendants 性质。例如:</p> +<pre class="brush: js">var element = <pets> + <dogs> + <fido color="red"/> + <spike color="blue"/> + </dogs> + </pets>; +element..fido.@color = "green"; +element..spike.@color = "purple"; +</pre> +<p>两只宠物狗的颜色都做了改变。</p> +<p>点(.)操作符的所有规则都适用于 .. 操作符。那就是说,如果有多个请求的类型,就会返回一个 XML 后代的列表。星号(*)选择器会返回 XML 列表的所有后代。</p> +<h2 id="过滤器">过滤器</h2> +<p>在很多情况下,尤其是用 * 选择器时,你并不想要处理 . 或 .. 操作符返回的所有节点。为了只处理其中特定的子集,可以将筛选条件放到 . 操作符后面的圆括号里。</p> +<pre class="brush: js">var element = <dogs> + <fido color="brown"/> + <spike color="black"/> + <killer color="brown"/> + </dogs>; +var list = element.*.(@color == "brown");</pre> +<p>本来,element.* 返回一个包含三只狗的列表。但其中只有 fido 和 killer 的颜色是褐色的。因此,该过来条件创建了一个只包含 fido 和 killer 的列表。</p> diff --git a/files/zh-cn/archive/web/e4x_tutorial/index.html b/files/zh-cn/archive/web/e4x_tutorial/index.html new file mode 100644 index 0000000000..4dac9ce0e8 --- /dev/null +++ b/files/zh-cn/archive/web/e4x_tutorial/index.html @@ -0,0 +1,39 @@ +--- +title: E4X教程 +slug: Archive/Web/E4X_tutorial +translation_of: Archive/Web/E4X_tutorial +--- +<p></p><div class="prevnext" style="text-align: right;"> + <p><a href="/zh-CN/docs/cn/E4X_Tutorial/Introduction">下一页 »</a></p> +</div><p></p> + +<div class="warning"> +<p>警告:E4X已废弃。 默认情况下,Firefox 16中的内容将禁用它,Firefox 17中的Chrome默认禁用,Firefox 18中将其删除。请使用DOMParser / DOMSerializer或非本机JXON算法。</p> +</div> + +<h2 id="Overview" name="Overview">概述</h2> + +<p>本教程带你走入<strong>E4X (EcmaScript for XML)基本语法</strong>. 通过使用E4X,程序员可以通过一个类似JavaScript编程的语法来操作XML文档。</p> + +<h2 id="Subjects" name="Subjects">科目</h2> + +<ul> + <li><a href="/cn/E4X_Tutorial/Introduction" title="cn/E4X Tutorial/Introduction">简介</a></li> + <li><a href="/cn/E4X_Tutorial/Accessing_XML_children" title="cn/E4X_Tutorial/Accessing_XML_children">访问XML子节点</a></li> + <li><a href="/cn/E4X_Tutorial/Descendants_and_Filters" title="cn/E4X_Tutorial/Descendants_and_Filters">子孙和过滤器</a></li> + <li><a href="/cn/E4X_Tutorial/Namespaces" title="cn/E4X Tutorial/Namespaces">命名空间</a></li> + <li><a href="/cn/E4X_Tutorial/The_global_XML_object" title="cn/E4X_Tutorial/The_global_XML_object">全局XML对象</a></li> +</ul> + +<h2 id="See_also" name="See_also">另请参阅</h2> + +<ul> + <li><a href="/cn/E4X" title="cn/E4X">E4X</a></li> + <li><a href="/cn/E4X/Processing_XML_with_E4X" title="cn/E4X/Processing_XML_with_E4X">使用E4X处理XML</a></li> +</ul> + +<p></p><div class="prevnext" style="text-align: right;"> + <p><a href="/zh-CN/docs/E4X_Tutorial:Introduction">下一页 »</a></p> +</div><p></p> + +<p></p> diff --git a/files/zh-cn/archive/web/e4x_tutorial/introduction/index.html b/files/zh-cn/archive/web/e4x_tutorial/introduction/index.html new file mode 100644 index 0000000000..2c0a2f7a76 --- /dev/null +++ b/files/zh-cn/archive/web/e4x_tutorial/introduction/index.html @@ -0,0 +1,64 @@ +--- +title: Introduction +slug: Archive/Web/E4X_tutorial/Introduction +tags: + - E4X + - JavaScript + - Tutorial +translation_of: Archive/Web/E4X_tutorial/Introduction +--- +<h2 id="基本语法">基本语法</h2> +<p>如果启用了 E4X,基本的 XML 元素就是有效的语法。例如:</p> +<pre class="brush: js">var element = <foo/> + </pre> +<p>在开启了 E4X 的浏览器里完全有效。</p> +<p>变量的声明也不局限于单个元素,并且和 JavaScript 一样可以扩多行。</p> +<pre class="brush: js">var element2 = <foo> + <bar/> + </foo> +</pre> +<p>此外,和一般的 XML 文档一样,你能给一个元素指定属性。</p> +<pre class="brush: js">var element3 = <foo baz="1"/> + </pre> +<p>操作元素</p> +<p>E4X 的目标是为 JavaScript 程序员提供一个简单的方法来操作 XML 文档,而无需通过 DOM 接口。不过,很多你在 DOM 中用过的函数也能用到 E4X 中。最基本的就是 appendChild:</p> +<pre class="brush: js">var element1 = <foo/> +var element2 = <bar/> +element1.appendChild(element2); +</pre> +<p>它会产生你期望的正确的 XML 文档:</p> +<p><code><foo><br> + <bar/><br> + </foo> </code></p> +<p><code>JavaScript 变量</code></p> +<p><code>当 XML 文档需要和 JavaScript 做紧密交互时,E4X 真正强大的地方才得以彰显。通过特定的语法,我们能将 JavaScript 变量的值赋给 E4X 元素。这是用大括号({})标记。</code></p> +<pre class="brush: js"><code>var a = 2; +var b = <foo>{a}</foo>; +</code></pre> +<p><code>创建了一段 XML 文档,内容为 <foo>2</foo>。</code></p> +<p><code>你也可以将大括号标记用于元素的属性(名字或值)。例如:</code></p> +<pre class="brush: js"><code>var a = 2; +var b = 'bar'; +var c = <foo {b}={a}>"hi"</foo>;</code></pre> +<p><code>创建的 XML 稍有不同:<foo bar="2">"hi"</foo>。</code></p> +<p><code>注意:XML 元素只接受文本作为他们的值。大括号标记真正发生的是调用变量的 toString 方法,并将返回值填到相应位置。例如:</code></p> +<pre class="brush: js"><code>var a = {foo: 1}; +var b = <bar>{a}</bar></code></pre> +<p><code>实际上产生的文档是 <bar>[object Object]</bar>。</code></p> +<h2 id="在内容中使用内联函数"><code>在内容中使用内联函数</code></h2> +<p><code>虽然大括号限定执行单条语句,但通过匿名函数内联可以执行一些额外的处理:</code></p> +<pre class="brush: js"><code>var a = 'foo'; +var b = <bar>{function () {var c = a.toUpperCase(); var d = 5 * 5; return c + d;}()}</bar></code></pre> +<p><code>上述代码产生:<bar>FOO25</bar></code></p> +<p><code>该用法更多的讨论请参加 <a href="/en/E4X_for_templating#Inline_functions" title="en/E4X_for_templating#Inline_functions">E4X for templating</a> 。</code></p> +<h2 id="序列化"><code>序列化</code></h2> +<p><code>E4X 最强大的工具就是简单地调用 .toXMLString() 就可以将整个 XML 文档(或其中部分)序列化到字符串中。</code></p> +<pre class="brush: js"><code>var element1 = <foo/>; +var element2 = <bar/>; +element1.apppendChild(element2); +element1.toXMLString();</code></pre> +<p><code>输出为:</code></p> +<p><code><code><foo><br> + <bar/><br> + </foo></code></code></p> +<p><code>本例使用 toString() 也能达到相同效果,不过在一个只有文本内容的元素上调用 toString() 将之产生文本内容(例如,<foo>abc</foo>.toString(); 会只产生 'abc')。</code></p> diff --git a/files/zh-cn/archive/web/e4x_tutorial/namespaces/index.html b/files/zh-cn/archive/web/e4x_tutorial/namespaces/index.html new file mode 100644 index 0000000000..8a2fc96063 --- /dev/null +++ b/files/zh-cn/archive/web/e4x_tutorial/namespaces/index.html @@ -0,0 +1,33 @@ +--- +title: Namespaces +slug: Archive/Web/E4X_tutorial/Namespaces +translation_of: Archive/Web/E4X_tutorial/Namespaces +--- +<h2 id="E4X_与_命令空间">E4X 与 命令空间</h2> +<p>通常情况下,XML 文档包含来自多种命令空间的元素。你可以通过声明为你的 E4X 对象设置默认的命名空间。</p> +<pre class="brush: js">default xml namespace = "http://www.w3.org/1999/xhtml"; +</pre> +<p>通过重复的声明,你可以随时更改相同范围内 E4X 的命名空间。</p> +<pre class="brush: js">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); +</pre> +<p>得出</p> +<p><code><p xmlns="<a class="external" href="http://www.w3.org/1999/xhtml" rel="freelink">http://www.w3.org/1999/xhtml</a>"><br> + Some text<br> + <label xmlns="<a class="external" href="http://www.mozilla.org/keymaster/gat...re.is.only.xul" rel="freelink">http://www.mozilla.org/keymaster/gat...re.is.only.xul</a>">More text</label><br> + </p> </code></p> +<h2 id="name()">name()</h2> +<p>在 XML 对象上调用 name() 会返回一个 QName 对象(Qualified Name)。QName 在支持 E4X 的 JavaScript 实现中是一个全局的构造函数。QName 对象有两个特别重要的属性:localName 返回元素的名字,且没有任何命名空间前缀;uri 返回元素所在的命名空间。</p> +<pre class="brush: js">var info = a.name(); +info.localName; // returns 'p'. +info.uri; // returns "http://www.w3.org/1999/xhtml"</pre> +<p>没有在任何命令空间的元素,他们的 uri 是一个空字符串。</p> +<p>Namespace 全局构造函数和 QName 非常相似。Namespace 的不同之处是 toString 方法,以及 Namespace 用 prefix 属性来代替 localName 属性<sup>[1]</sup> 。</p> +<p>关于 E4X 的命名空间,更多的内容请参见 <a href="/cn/E4X/Processing_XML_with_E4X#Handling_namespaces" title="cn/E4X/Processing_XML_with_E4X#Handling_namespaces">Processing XML with E4X</a> 。</p> +<h2 id="译者注">译者注</h2> +<ol> + <li>原文中没有详细讲,获得 Namespace 对象的方法是调用 .namespace()。其中 QName 的 toString 方法会输出 Namespace::name 的形式,而 Namespace 的 toString 只会输出命名空间。</li> +</ol> 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 new file mode 100644 index 0000000000..910b422ada --- /dev/null +++ b/files/zh-cn/archive/web/e4x_tutorial/the_global_xml_object/index.html @@ -0,0 +1,55 @@ +--- +title: The global XML object +slug: Archive/Web/E4X_tutorial/The_global_XML_object +translation_of: Archive/Web/E4X_tutorial/The_global_XML_object +--- +<h2 id="全局_XML_对象">全局 XML 对象</h2> +<p>E4X-capable JavaScript 引擎在全局对象上放了一个新的属性。XML 对象有许多属性允许你定制解析和序列化 E4X。XML 元素从他们创建开始就记住 XML 对象的设置。</p> +<h2 id="扩展_XML.prototype">扩展 XML.prototype</h2> +<p>XML.prototype 和 XMLList.prototype(XMLList.prototype 实际上就是 XML.prototype)不能像其他构造器(例如 Object)一样扩展。你只能在 XML.prototype 里定义方法,而不能定义字段。要向 XML.prototype 添加一个方法,则要定义 XML.prototype.function::methodName 或 XML.prototype.funciton::[methodNameString]。下例定义 fooCount() 方法,返回 XML 中 <foo> 元素的个数:</p> +<p> </p> +<pre class="brush: js">XML.prototype.function::fooCount = function fooCount() { + return this..foo.length(); +}; +<foobar><foo/><foo/><foo/></foobar>.fooCount() // returns 3</pre> +<p> </p> +<h2 id="ignoreComments">ignoreComments</h2> +<p>默认为 true。该属性告诉 E4X 在序列化和筛选时忽略注释节点。即当 ignoreComments 为 ture 时 .comments() 返回空。观察如下例子:</p> +<p> </p> +<pre class="brush: js">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></pre> +<p> </p> +<h2 id="ignoreProcessingInstructions">ignoreProcessingInstructions</h2> +<p>默认为 ture。该属性告诉 E4X 在序列化和筛选时忽略 XML 中的处理指令。例如:</p> +<p> </p> +<pre class="brush: js">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></pre> +<p> </p> +<h2 id="ignoreWhitespace">ignoreWhitespace</h2> +<p>默认为 true。忽略节点之间以及节点文本头尾两端的空白,而其他的则被解析为文本节点或作为文本节点的一部分。</p> +<h2 id="prettyPrinting">prettyPrinting</h2> +<p>默认是 true。为 true 时,toXMLString() 序列化 E4X 对象时会包含换行和缩进。</p> +<h2 id="prettyIndent">prettyIndent</h2> +<p>默认值是 2。代表 XML 树每层缩进的空格数。如果 prettyPrinting 是 false 则忽略。</p> |