C# 使用求和条件XPATH C选择节点#

C# 使用求和条件XPATH C选择节点#,c#,xml,xpath,sum,C#,Xml,Xpath,Sum,我试图做一些查询,返回的电视节目在所有的季节中都超过了epidods的数量。 我有一个获取XMLDoc和amount的函数 我试着这么做,但出了点问题: public XmlNodeList Query7(XmlDocument xmlDoc, int amountOfEpisodes)// { string s = "Netflix/TV-shows/TV-show[sum(seasons)>"+amountOfEpisod

我试图做一些查询,返回的电视节目在所有的季节中都超过了epidods的数量。 我有一个获取XMLDoc和amount的函数

我试着这么做,但出了点问题:

   public XmlNodeList Query7(XmlDocument xmlDoc, int amountOfEpisodes)// 
            {
                string s = "Netflix/TV-shows/TV-show[sum(seasons)>"+amountOfEpisodes+"]";
                XmlNodeList xmlNodeList = xmlDoc.SelectNodes(s);
                return xmlNodeList;
            }
XMLDoc:

<Netflix>
  <TV-shows>
    <TV-show>
          <name>Game of Thrones</name>
          <genre>Action</genre>
          <year>2011</year>
          <seasons>
            <season>
              <episodes>10</episodes>
            </season>
            <season>
              <episodes>10</episodes>
            </season>
            <season>
              <episodes>10</episodes>
            </season>
            <season>
              <episodes>10</episodes>
            </season>
            <season>
              <episodes>10</episodes>
            </season>
            <season>
              <episodes>10</episodes>
            </season>
            <season>
              <episodes>7</episodes>
            </season>
          </seasons>
        </TV-show>
        <TV-show>
          <name>The Sopranos</name>
          <genre>Crime</genre>
          <year>1999</year>
          <seasons>
            <season>
              <episodes>13</episodes>
            </season>
            <season>
              <episodes>13</episodes>
            </season>
            <season>
              <episodes>13</episodes>
            </season>
            <season>
              <episodes>13</episodes>
            </season>
            <season>
              <episodes>13</episodes>
            </season>
            <season>
              <episodes>21</episodes>
            </season>
          </seasons>
        </TV-show>
        <TV-show>
 </TV-shows>
</Netflix>

权力游戏
行动
2011
10
10
10
10
10
10
7.
黑道家族
罪行
1999
13
13
13
13
13
21
例如,在我上面的XML中,输入“70”的结果应该是 “黑道家族”是因为70集以上的剧集总数只在黑道家族中出现


感谢您的帮助

您的xpath不起作用,因为sum(seasures)没有任何意义,因为seasures不是一个数字。你可以通过count(seasons)获得季节数,但这不是你想要的。相反,您需要剧集的总和,因此需要选择剧集:


/Netflix/Tv shows/Tv show[sum(seasures/seasure/seasures)>“+amountOfEpisodes+”]”

您的xpath不起作用,因为sum(seasures)没有任何意义,因为seasures不是一个数字。您可以通过count(seasures)获得seasures的计数但这不是你想要的。相反,你想要的是剧集总数,所以你需要选择剧集:

/Netflix/Tv shows/Tv show[总和(季/季/集)>“+amountOfEpisodes+”]”

使用xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            var results = doc.Descendants("TV-show").Select(x => new
            {
                name = (string)x.Element("name"),
                episodes = x.Descendants("episodes").Count()
            }).ToList();


        }
    }
}
使用xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            var results = doc.Descendants("TV-show").Select(x => new
            {
                name = (string)x.Element("name"),
                episodes = x.Descendants("episodes").Count()
            }).ToList();


        }
    }
}

我只是想提交同样的答案。你更快了:-)谢谢!作品我还有一个问题。XML中是否存在distinct命令?取决于xpath的版本限制。他们在2.0中添加了distinct values函数:例如,如果我选择了一些参与者,并且有重复的姓氏,我如何在这里使用distinct//演员/演员[出生年份>'“+出生年份+”][计数(奖项/奖项)>“+amountOfAwards+”]/姓氏";@DavidZaltsman如果您还有其他问题,请将其作为一个新问题提问,而不是作为对前一个问题答案的评论。只想提交相同的答案。你更快了:-)谢谢!作品我还有一个问题。XML中是否存在distinct命令?取决于xpath的版本限制。他们在2.0中添加了distinct values函数:例如,如果我选择了一些参与者,并且有重复的姓氏,我如何在这里使用distinct//演员/演员[出生年份>'“+yearOfBirth+”][count(awards/award)>“+amountOfAwards+”]/姓氏”@DavidZaltsman如果还有其他问题,请作为新问题提问,而不是作为对前一个问题答案的评论。否决投票是因为我认为当有人用特定语言(XPath)要求解决方案时,用不同的语言给出一个解决方案是离题的,不是答案,除非有很好的解释理由建议使用不同的技术。此外,我对这个问题的解释是OP想要的是
剧集
元素值的总和,而不是
剧集
元素的计数。因为我认为当有人要求使用特定语言(XPath)的解决方案时,用不同的语言给出解决方案是离题的,而不是答案,除非有很好的解释理由建议使用不同的技术。此外,我对这个问题的解释是OP想要的是
剧集
元素值的总和,而不是
剧集
元素的计数。