2010-01-14 45 views
4

鉴于此文件:什么是此xpath查询的Flex/AS3/E4X等效物?

<doc> 
    <element> 
     <list> 
      <key attr='val'/> 
     </list> 
    </element> 
    <element> 
     <list> 
      <key attr='other'/> 
     </list> 
    </element> 
    <element> 
     <list/> 
    </element> 
</doc> 

我想要的E4X当量的XPath //element[list/key/@attr="val"]的。有可能这样做吗?

回答

2
..element.([email protected] == "val") 
+0

在没有@attr属性的情况下存在关键元素的情况下会做什么?我知道XPath不会为此返回任何节点,但对于简单表达式,e4x会为缺少属性错误类型的环境。这也发生在这里吗? – 2010-01-18 06:22:15

+0

根据我的经验,如果缺少属性,则不会返回任何错误,也不会抛出错误。 – invertedSpear 2010-01-18 14:58:59

+0

这将导致AS3中没有问题。 JavaScript有一个问题。只要在过滤器中对子节点上的属性进行检查(即使存在与否),也不会引发错误。 '..(@ bar ==“baz”)'会抛出一个错误,因为不是每个元素都有一个'bar'属性,所以你想尝试'..(function :: attribute(“bar”)==“ baz“)'在JavaScript中。 – 2010-01-18 15:27:35

2
xmlVarName.element.list.key.(@attr=="val"); 

替代

xmlVarName..key.(@attr=="val"); 
+0

不,这将返回关键节点。我所展示的xpath返回具有特定关键属性的元素节点。 – 2010-01-16 14:18:06

+0

'//元素'不是'.element'(它是'/ element')。这将是'..element'。 – 2010-01-17 22:43:26

+0

我误解了你在找的东西,抱歉,不熟悉xpath。以利亚有一个答案,另一个是调用parent()方法,如xmlVarName.element.list.key。(@ attr ==“val”)。parent()。parent()(尽管Elijah's更干净)。 – invertedSpear 2010-01-18 14:57:41

1

如果关键节点并不都具有@attr重要的是要注意的是

..element.([email protected] == "val") 

可能会失败。

最安全(虽然以我的经验,并非100%成功)方法来提取您的节点列表将是。

..element.(list.key.attribute("attr") == "val") 

不过,我曾与E4X和条件表达式,(AS3实现,Mozilla的似乎更好。),但它似乎是下降到XML源问题。

相关问题