我有以下不可更改的XML文件:
<products>
<product>
<attributes>
<att name="Name" value="TOTO" />
<att name="Surname" value="Toto" />
<att name="Age" value="10" />
</attributes>
</product>
<product>
<attributes>
<att name="Name" value="TATA" />
<att name="Surname" value="Tata" />
<att name="Age" value="20" />
</attributes>
</product>
<product>
<attributes>
<att name="Name" value="TITI" />
<att name="Surname" value="Titi" />
<att name="Age" value="30" />
</attributes>
</product>
</products>
使用C#,我需要为值等于 Name 和 Age 的节点提取 value 字段的值,at给定的指数。好例子:输入 2 将返回包含 TITI 的字符串和另一个包含 30 的字符串。
目前,我使用XmlDocument加载XML文件,使用GetElementsByTagName方法获取XmlNodeList以获取所有属性;然后,我可以显示这些元素,但我不能只显示其中的两个元素,具体取决于属性名称和索引。
充其量,我需要一个类似 myXmlNodeList.Node [&#34; att&#34;]的方法。属性[&#34;名称&#34;]。AtIndex(x)。< / p>
有人能帮帮我吗?
答案 0 :(得分:0)
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml =
"<products>" +
"<product>" +
"<attributes>" +
"<att name=\"Name\" value=\"TOTO\" />" +
"<att name=\"Surname\" value=\"Toto\" />" +
"<att name=\"Age\" value=\"10\" />" +
"</attributes>" +
"</product>" +
"<product>" +
"<attributes>" +
"<att name=\"Name\" value=\"TATA\" />" +
"<att name=\"Surname\" value=\"Tata\" />" +
"<att name=\"Age\" value=\"20\" />" +
"</attributes>" +
"</product>" +
"<product>" +
"<attributes>" +
"<att name=\"Name\" value=\"TITI\" />" +
"<att name=\"Surname\" value=\"Titi\" />" +
"<att name=\"Age\" value=\"30\" />" +
"</attributes>" +
"</product>" +
"</products>";
XElement products = XElement.Parse(xml);
var results = products.Elements("product").Select(x => new
{
name = x.Descendants("att").Where(y => y.Attribute("name").Value == "Name").Select(z => z.Attribute("value").Value).FirstOrDefault(),
age = x.Descendants("att").Where(y => y.Attribute("name").Value == "Age").Select(z => (int)z.Attribute("value")).FirstOrDefault()
}).ToList();
string name = results[2].name;
int age = results[2].age;
}
}
}