访问后代节点
很多时候,你感兴趣的节点往往不是 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 的列表。