我有一个包含我的数据的大型Xml文件。我需要以编程方式从中获取数据。这是一个小得多的文件,但具有完全相同的结构...
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<colours xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Red>
<Shade id="1">
<colour>crimson</colour>
</Shade>
<Shade id="2">
<colour>raspberry</colour>
</Shade>
<Shade id="3">
<colour>lava</colour>
</Shade>
<Shade id="4">
<colour>scarlet</colour>
</Shade>
</Red>
<Green>
<Shade id="1">
<colour>asparagus</colour>
</Shade>
<Shade id="2">
<colour>emerald</colour>
</Shade>
<Shade id="3">
<colour>lime</colour>
</Shade>
<Shade id="4">
<colour>avocado</colour>
</Shade>
</Green>
<Blue>
<Shade id="1">
<colour>cyan</colour>
</Shade>
<Shade id="2">
<colour>sapphire</colour>
</Shade>
<Shade id="3">
<colour>powder</colour>
</Shade>
<Shade id="4">
<colour>iris</colour>
</Shade>
</Blue>
</colours>
我需要解决个别阴影,知道颜色,例如&#34;红色&#34;并且Shade id例如。&#34; 3&#34;。
以下代码计算了阴影元素的数量,这是我需要的东西,但除此之外的任何事情对我来说仍然是一个谜。
string filepath = "C:/Documents/Data.xml";
XElement MyData = XElement.Load(filepath);
int count = MyData.Elements("Red")
.Elements("shade")
.Count();
Console.Write(count);
Console.ReadKey();
答案 0 :(得分:1)
如果我理解正确,您希望找到有多少元素具有给定的Shade ID。
您可以对Linq使用XPath查询到XML的XElement。
试试这个:
public void FindShades()
{
string exePath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
string filepath = exePath + @"\XML\Colours.xml";
XElement MyData = XElement.Load(filepath);
IEnumerable<XElement> data = MyData.XPathSelectElements("//Shade[@id='3']");
int count = data.Count();
}
如果这是您想要的,请告诉我。如果没有,请发表评论,我将修改我的答案。
干杯
答案 1 :(得分:1)
试试这个
XDocument MyData = XDocument.Load(FILENAME);
string color = MyData.Descendants("Red").Elements("Shade").Where(y => (int)y.Attribute("id") == 3).FirstOrDefault().Value;
答案 2 :(得分:1)
除了使用XPath谓词之外,如the other answer所示,您可以使用LINQ Where()
方法过滤元素以满足特定条件:
int count = MyData.Elements("Red")
.Elements("Shade")
.Where(o => (int?)o.Attribute("id") == 3)
.Count();
<强> Dotnetfiddle Demo
强>
请注意,XML区分大小写,因此“Shade”不等于“shade”