Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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# 使用C中的xdocument从xml文件中提取特定数据_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

C# 使用C中的xdocument从xml文件中提取特定数据

C# 使用C中的xdocument从xml文件中提取特定数据,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我试图从xml文件中获取相关数据。例如,我希望从名为Roker Park的元素中选择所有数据,从venue元素中选择。如何仅选择该数据而不选择其余数据?这是我的xdocument <Funrun> <Venue> <Name>Roker Park</Name> <Runner> <Charity>Cancer Research</Charity>

我试图从xml文件中获取相关数据。例如,我希望从名为Roker Park的元素中选择所有数据,从venue元素中选择。如何仅选择该数据而不选择其余数据?这是我的xdocument

<Funrun>
    <Venue> 
        <Name>Roker Park</Name>
        <Runner> 
            <Charity>Cancer Research</Charity>
            <Firstname>Roger</Firstname>
            <Lastname>Malibu</Lastname>
            <Sponsorship>550</Sponsorship>
        </Runner>
        <Runner>
            <Charity>Arthritis UK</Charity>
            <Firstname>Adam</Firstname>
            <Lastname>White</Lastname>
            <Sponsorship>340</Sponsorship>
        </Runner>
        <Venue> 
            <Name>Victoria Park</Name>
            <Runner> 
                <Charity>Against Malaria Foundation</Charity>
                <Firstname>Rob</Firstname>
                <Lastname>Tate</Lastname>
                <Sponsorship>850</Sponsorship>
            </Runner>
            <Runner>
                <Charity>Fred Follows Foundation</Charity>
                <Firstname>Peter</Firstname>
                <Lastname>Jackson</Lastname>
                <Sponsorship>500</Sponsorship>
            </Runner>
        </Venue>
</Funrun>
到目前为止,我得到的代码选择了所有场馆数据,因此我得到了维多利亚公园和韩国游客,这是我到目前为止得到的代码:

List<string> VenueNames = new List<string>();
List<string> VenueDataList = 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 (XElement element in combinedunique.DescendantsAndSelf("Venue"))
{
    VenueNames.Add(element.Element("Name").Value.ToString());
}

if (Convert.ToString(lstboxVenues.SelectedItem) == VenueNames.ElementAt(0))
{
    foreach (XElement element in combinedunique.DescendantsAndSelf("Firstname"))   
    {
        VenueDataList.Add(element.Value);
    }

    for (int i = 0; i < VenueDataList.Count; i++)
    {
        lstboxVenueData.Items.Add(VenueDataList.ElementAt(i));
    }
}

获取所有场馆名称:

List<strgin> VenueNames = combindedunique.Select(v => (string)v.Element("Name")).ToList();
通过给定的场馆名称获取名字:

string venueName = "Victoria Park"; // name you want to search by
List<string> VenueDataList =
      combindedunique.Where(v => (string)v.Element("Name") == venueName)
                     .Elements("Runner")
                     .Select(r => (string)r.Element("Firstname"))
                     .ToList();

在xml样本中似乎没有结束标记这里有一个类似的答案,应该可以得到您想要的。您能澄清一下您想要从给定的xml中获得什么数据吗?我确实有一个标记,我只是不小心没有复制它,抱歉。我想得到的数据是来自Roker公园的慈善机构、名字、姓氏和赞助价值,而不是维多利亚公园。
string venueName = "Victoria Park"; // name you want to search by
List<string> VenueDataList =
      combindedunique.Where(v => (string)v.Element("Name") == venueName)
                     .Elements("Runner")
                     .Select(r => (string)r.Element("Firstname"))
                     .ToList();
[
  "Rob",
  "Peter"
]