Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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#_Linq_Linq To Xml_Xelement - Fatal编程技术网

C# 检查xml数据中是否存在特定节点

C# 检查xml数据中是否存在特定节点,c#,linq,linq-to-xml,xelement,C#,Linq,Linq To Xml,Xelement,下面给出了一个xml数据。我需要检查生产部门是否有empName=“John”的员工。如果存在,则更新薪资,否则将员工添加到部门 <Company> <Company Name="ABCDEF" /> <Place="AKR" /> <Production> <employee empName="John" empId="E11" salary="1000" /> <em

下面给出了一个xml数据。我需要检查生产部门是否有empName=“John”的员工。如果存在,则更新薪资,否则将员工添加到部门

 <Company>   
    <Company Name="ABCDEF" />
    <Place="AKR" />
    <Production>
       <employee empName="John" empId="E11" salary="1000" />
       <employee empName="Ivan" empId="E12" salary="3000" />
       <employee empName="Paul" empId="E13" salary="1200" />
    </Production>
    <Marketing>
      <employee empName="Keith" empId="EMP11" />
      <employee empName="Christina" empId="EMP12" />
    </Marketing>
  </Company>


我需要使用c#linq?检查此数据中存在的特定节点

首先更正XML

<Company>
  <Company Name="ABCDEF" />
    <Production>
    <employee empName="John" empId="E11" salary="1000" />
    <employee empName="Ivan" empId="E12" salary="3000" />
    <employee empName="Paul" empId="E13" salary="1200" />
  </Production>
  <Marketing>
    <employee empName="Keith" empId="EMP11" />
    <employee empName="Christina" empId="EMP12" />
  </Marketing>
</Company>
试试这个:

XmlNode node = xmlDoc.SelectSingleNode(NodeName);

您的XML无效;您不能有像

但是,在将其更改为有效内容后,可以尝试使用以下LINQ语句:

XDocument root = XDocument.Parse(File.ReadAllText("xml.xml"));

IEnumerable<XElement> production = root.Root
    .Descendants("Production")
    .Where(x => x.Elements("employee")
        .Where(e => e.Attribute("empName").Value.Equals("John"))
        .Any()
    );

if (production.Any())
{
    Console.WriteLine("John found...");
}
else
{
    Console.WriteLine("No John found");
}
XDocument root=XDocument.Parse(File.ReadAllText(“xml.xml”));
IEnumerable production=root.root
.后代(“生产”)
其中(x=>x.Elements(“员工”)
其中(e=>e.Attribute(“empName”).Value.Equals(“John”))
.Any()
);
if(production.Any())
{
Console.WriteLine(“约翰找到了…”);
}
其他的
{
控制台。WriteLine(“未找到John”);
}

您的XML未经验证;你不能有这样一个节点,答案是否有用?你设法解决了这个问题吗?请更新此SO项目;也许你可以检查其中一个答案为“正确”。。。
XDocument root = XDocument.Parse(File.ReadAllText("xml.xml"));

IEnumerable<XElement> production = root.Root
    .Descendants("Production")
    .Where(x => x.Elements("employee")
        .Where(e => e.Attribute("empName").Value.Equals("John"))
        .Any()
    );

if (production.Any())
{
    Console.WriteLine("John found...");
}
else
{
    Console.WriteLine("No John found");
}