在Xpath中不同?
 我有这个XML文件,我想从中计算引用的用户数。 但他们可以出现在多个类别中,我希望这些副本不被考虑在内。 
 在下面的例子中,查询应该返回3而不是4.有没有在XPath的方式来这样做? 用户根本没有sorting。 
<list> <group name='QA'> <user name='name1'>name1@email</user> <user name='name2'>name2@email</user> </group> <group name='DEV'> <user name='name3'>name3@email</user> <user name='name2'>name2@email</user> </group> </list> 一个纯XPath 1.0 – 一行 :
用途 :
 count(/*/group/user[not(. = ../following-sibling::group/user)]) 
使用你可以使用的函数命名空间http://www.w3.org/2005/xpath-functions
 distinct-values(//list/group/user) 
更新:
 在你的xsl / xslt文件的顶部,你应该有一个样式表元素,将上面的url映射到前缀fn ,如下所示… 
 <xsl:stylesheet version="1.0" xmlns:fn="http://www.w3.org/2005/xpath-functions" > 
那么你可以使用
 select="fn:distinct-values(//list/group/user)" 
这将假设你正在模板中做这个,而不是在一些xpathdocument对象中,在这种情况下你需要使用一个namespacemanager类。
链接…
XSLT:向根元素添加名称空间
http://www.xqueryfunctions.com/xq/fn_distinct-values.html
http://msdn.microsoft.com/en-us/library/d6730bwt(VS.80).aspx
否则,请尝试Dimitre Novatchev的答案。
我有一个更好的答案
 count(//user[not(. = following::user/.)]) 
不知道你是否可以在XPath中完成,但可以使用System.Linq轻松完成:
 string xml = "<list><group name='QA'><user name='name1'>name1@email</user><user name='name2'>name2@email</user></group><group name='DEV'><user name='name3'>name3@email</user><user name='name2'>name2@email</user></group></list>"; XElement xe = XElement.Parse(xml); int distinctCount = xe.Elements().Elements().Select(n => n.Value).Distinct().Count(); 
在这个例子中,distinctCount将等于3。
你将需要使用这样的两个function。
 count(distinct-values(//list/group/user)) 
 首先得到distinct值,然后count它们