2012-01-04 68 views
3

这可能是一个愚蠢的问题,但是可以使用XPath进行查询而不指定元素名称? 通常我会写一些像查询多个元素而不指定元素名称

//ElementName[@id = "some_id"] 

但事实是我有一个id属性多(约40),不同的元素类型,我希望能够回到任何人如果ID相符。但我不想单独为每种类型打电话。无论名称如何,是否可以一次搜索所有这些内容?

我在XQuery脚本中使用它,如果提供任何帮助。

+1

不是一个愚蠢的问题 – 2012-01-04 18:58:45

回答

5

用*代替名字//*[@id = "some_id"]

+0

这么简单:)谢谢! – pajevic 2012-01-04 19:12:43

1

这可能是更有效的直接在@id要素看 - // *将工作,但开始会返回每个节点在文档中,然后过滤!

当然,这在小文档中可能无关紧要。但这里有一个选择:

//@id[.="some_id"]/.. 
+0

其实它很重要,因为我从一个数据库中查询很多(超过100.000个元素)。 – pajevic 2012-01-05 12:49:02

+0

如果它是一个XML数据库,如MarkLogic或eXist,您可能会发现某些属性(如@id)已编入索引,这也可能有利于此替代方法。 – 2012-01-05 14:13:20

+0

实际上,我使用eXist,并且在eXist邮件列表中询问了哪些最有效。以下是Wolfgang Meier(eXist的原始创建者)回复: _eXist优化// * [@ id =“some_id”]中的通配符步骤, 基本上与'//@id[.="some_id“]相同/ ..'。 eXist将首先评估'@id =“some_id”',然后计算'@ id'的哪些父元素将匹配通配符。但对于一般的XPath查询,我相信您的建议是有效的。 – pajevic 2012-01-05 21:38:09