Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要从XML文件C中选择数据_C#_Xml_Linq To Xml - Fatal编程技术网

C# 需要从XML文件C中选择数据

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文件中获取数据,该文件已与其他两个文件合并,并从该文件中选择了每个地点,然后尝试将该值添加到列表中,以便我可以进一步操作它

这是我的一个XML文件

<?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".