|
2006-01-12 |
通过 Rhino 使用 E4X
如果您同我们的操作完全一样,那么现在就可以尝试该操作。Rhino 1.6R1 最新的版本以及来自 Apache 的 XMLBeans 程序库都支持 E4X。使用它们非常的简单,只要获取这些包,将它们解压,然后将 js.jar 和 xbean.jar 添加到您的类路径中,就可以启动 JavaScript 处理程序了。
java -cp js.jar;xbean.jar
org.mozilla.javascript.tools.shell.Main |
您现在可以尝试以下实例。您可以将它们从该处剪切并复制,或者将它们包含在 examples1.js 文件中,该文件位于 zip 文件(ws-ajax1code.zip)中,您可以通过点击本文顶部或者底部的代码图标来下载该文件。您仅仅需要使用 JavaScript 的属性就可以查看 XML 的任何部分。例如:
print(x.person[0].name);
Ant
rint(x.person[1].hair);
Spiky |
您注意到了吗,到目前为止,我们还没有使用诸如 DOM 或者 SAX 之类的 XML API。XML 只是变成了一种 JavaScript 能够理解的本地类型。使用以下代码来打印两个人的高度:
for each (var h in x..height)
{
print(h)
};
176
178 |
语法非常有用。它返回所有的,任何深度的能够匹配后面紧跟的标记名称的子元素。因此 x..height 返回 height 标记的数值。以下是另一个有用的语法:
print(x.person.(name=="Ant").hair);
Shaggy |
这将使得在 XML 树中可以很容易地进行查看操作。一个更复杂的样本实例
假定您想要将高度值从米制度量单位更改为英美制度量单位(也就是英国人常说的英尺和英寸单位)。下面首先是厘米到英寸的转换;
function metricToImperial(cms)
{
var totalinches = Math.round(cms/2.54);
var inch = totalinches%12;
var ft = (totalinches-inch)/12;
var response = <height/>;
response.feet = ft;
response.inches = inch + 2;
// we sounded a bit short
response.@measure = "imperial";
return response;
} |
首先值得注意的一行是:
var response = <height/>; |
该行允许您将 XML “嵌入”到 JavaScript 中。采用这种语法有两个好处:第一,它确实会使 XML 的使用变得很容易。第二,这些代码的意义非常清晰。现在您可以向该元素中添加更多的子元素:
这样创建了 子元素,其标记名称被设置为“feet”,并且将数值设置为变量 ft 的值。您也可以用这种方式操作其属性:
response.@measure = "imperial"; |
现在我们使用该功能来更新 XML:
for each (var p in x.person)
{
if (p.height.@measure=="metric")
.height=metricToImperial(p.height);
}
print (x); |
这里是输出内容:
<people>
<person gender="male">
<name>Ant</name>
<hair>Shaggy</hair>
<eyes>Blue</eyes>
<height measure="imperial">
<feet>5</feet>
<inches>11</inches>
</height>
</person>
<person gender="male">
<name>Paul</name>
<hair>Spiky</hair>
<eyes>Grey</eyes>
<height measure="imperial">
<feet>5</feet>
<inches>12</inches>
</height>
</person>
lt;/people> | |