C# 使用求和条件XPATH C选择节点#
我试图做一些查询,返回的电视节目在所有的季节中都超过了epidods的数量。 我有一个获取XMLDoc和amount的函数 我试着这么做,但出了点问题: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
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想要的是剧集
元素值的总和,而不是剧集
元素的计数。