distinct in Xpath?

后端 未结 6 805
走了就别回头了
走了就别回头了 2020-12-03 04:37

I have this XML file, from which I\'d like to count the number of users referenced in it. But they can appear in more than one category, and I\'d like these duplicates not t

相关标签:
6条回答
  • 2020-12-03 04:42

    I have a better answer

    count(//user[not(. = following::user/.)])
    
    0 讨论(0)
  • 2020-12-03 04:49

    You will need to use two functions like this.

    count(distinct-values(//list/group/user))
    

    First get the distinct values, then count them

    0 讨论(0)
  • 2020-12-03 04:53

    A pure XPath 1.0 -- one-liner:

    Use:

    count(/*/group/user[not(. = ../following-sibling::group/user)])

    0 讨论(0)
  • 2020-12-03 04:54
    count(//user[not(./@name = preceding::user/@name)])
    

    I think the best way is to try to draw your xml data on paper to see how you can solve it easily

    0 讨论(0)
  • 2020-12-03 04:55

    Not sure if you could do it in XPath, but it could be done easily using 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();
    

    In this example, distinctCount will equal 3.

    0 讨论(0)
  • 2020-12-03 05:06

    using the functions namespace http://www.w3.org/2005/xpath-functions you can use

    distinct-values(//list/group/user)
    

    UPDATE:

    At the top of your xsl/xslt file you should have a stylesheet element, map the url above to the prefix fn as below...

    <xsl:stylesheet version="1.0"
     xmlns:fn="http://www.w3.org/2005/xpath-functions"
     >
    

    then you can use

    select="fn:distinct-values(//list/group/user)"
    

    this would assume you are doing this in templates and not in some xpathdocument object inwhich case you need to use a namespacemanager class.

    links...

    XSLT: Add namespace to root element

    http://www.xqueryfunctions.com/xq/fn_distinct-values.html

    http://msdn.microsoft.com/en-us/library/d6730bwt(VS.80).aspx

    Otherwise try Dimitre Novatchev's answer.

    0 讨论(0)
提交回复
热议问题