2014-04-01 109 views
0

我有一個xml數據如下。我需要檢查生產部門中是否存在僱員empName =「John」。如果存在,則更新薪資,否則將員工添加到部門。檢查xml數據中是否存在特定節點

<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檢查這個數據中存在的特定節點嗎?

+1

你的XML是unvalid;你不能有像

+0

這樣的節點,那麼,是否有任何答案有幫助?你有沒有設法解決這個問題?請更新這個SO項目;也許你可以檢查1個答案爲'正確'... –

回答

1

糾正你的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> 

你可以嘗試這樣的

string filePaths = "XMLFile1.xml"; 
    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load(filePaths); 
    XmlNodeList elements = xmlDoc.GetElementsByTagName("employee"); 
    Boolean found = false; 
    foreach (XmlElement element in elements) 
    { 

     if (element.GetAttribute("empName") == "John") 
     { 
      found = true; 
      break; 
     } 
    } 
0

試試這個:

XmlNode node = xmlDoc.SelectSingleNode(NodeName); 
1

你的XML是無效的;你不能有像<Place="AKR" />

節點但是,改變它弄成有效後,你可以嘗試使用這個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"); 
} 
相關問題