C# 需要从XML文件C中选择数据
我要做的是从我的XML文件中获取数据,该文件已与其他两个文件合并,并从该文件中选择了每个地点,然后尝试将该值添加到列表中,以便我可以进一步操作它 这是我的一个XML文件C# 需要从XML文件C中选择数据,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我要做的是从我的XML文件中获取数据,该文件已与其他两个文件合并,并从该文件中选择了每个地点,然后尝试将该值添加到列表中,以便我可以进一步操作它 这是我的一个XML文件 <?xml version="1.0" encoding="utf-8" ?> <Funrun> <Venue name="Roker Park"> <Runner charity="Cancer Research"> <Firstname>Roger</Fi
<?xml version="1.0" encoding="utf-8" ?>
<Funrun>
<Venue name="Roker Park">
<Runner charity="Cancer Research">
<Firstname>Roger</Firstname>
<Lastname>Malibu</Lastname>
<Sponsorship>550</Sponsorship>
</Runner>
<Runner charity="Arthritis UK">
<Firstname>Adam</Firstname>
<Lastname>White</Lastname>
<Sponsorship>340</Sponsorship>
</Runner>
</Venue>
</Funrun >
我需要能够选择场馆名称并将其保存到列表中。到目前为止,我得到的是:
List<string> VenueNames = new List<string>();
var doc = XDocument.Load("XMLFile1.xml");
var doc2 = XDocument.Load("XMLFile2.xml");
var doc3 = XDocument.Load("XMLFile3.xml");
var combinedUnique = doc.Descendants("Venue")
.Union(doc2.Descendants("Venue"))
.Union(doc3.Descendants("Venue"));
foreach (var venuename in combinedUnique.Elements("Venue"))
{
VenueNames.Add(venuename.Attribute("name").Value));
}
我做这件事最简单的方法就是在他们所属的元素中加入名字和慈善。 我建议您首先重新格式化文档,使其看起来像这样:
<Funrun>
<Venue>
<Name>Roker Park</Name>
<Runner1>
<charity>Cancer Research</charity>
<Firstname>Roger</Firstname>
<Lastname>Malibu</Lastname>
<Sponsorship>550</Sponsorship>
</Runner1>
<Runner2>
<charity>Arthritis UK</charity>
<Firstname>Adam</Firstname>
<Lastname>White</Lastname>
<Sponsorship>340</Sponsorship>
</Runner2>
</Venue>
</Funrun >
请注意,通过组合Funrun example:Venue下的所有元素,只需迭代所有元素,而无需切换文档,您就可以变得更简单
接下来转到C:
List<string> VenueNames = new List<string>();
var doc = XDocument.Load("XMLFile1.xml");
var doc2 = XDocument.Load("XMLFile2.xml");
var doc3 = XDocument.Load("XMLFile3.xml");
foreach (XElement element in doc.Root.Descendants("Venue"))
{
VenueNames.Add(element.Element("Name").Value.ToString());
}
//Copy paste this code for each document you would like to search through, though of course change "doc" to say, "doc2".
很快,这段代码将首先打开XDocument中的根元素。它将找到该元素的具有名称、名称的decentant,并将每个decentant的值作为字符串复制到您的列表中。这为什么不能满足您的要求?除了有更好的方法编写上述代码外,请澄清上述代码的错误,你打算怎么做?您好,首先感谢您,这非常好地工作。但是当我在合并的唯一变量中合并文件时,它似乎不接受Root,有没有办法解决这个问题,或者我必须按照你的建议来做?
List<string> VenueNames = new List<string>();
var doc = XDocument.Load("XMLFile1.xml");
var doc2 = XDocument.Load("XMLFile2.xml");
var doc3 = XDocument.Load("XMLFile3.xml");
foreach (XElement element in doc.Root.Descendants("Venue"))
{
VenueNames.Add(element.Element("Name").Value.ToString());
}
//Copy paste this code for each document you would like to search through, though of course change "doc" to say, "doc2".