2011-03-17 75 views
0

我有一個看起來像這樣的XML文件:LINQ to XML - 如何閱讀此XML?

... 
<body> 

<unit id="1" name ="xxx"> 
<sourceFile>SomeFile.xml</sourceFile> 
<targetFile/> 
</unit> 

<unit id="2" name ="xxx"> 
<sourceFile>SomeFile.xml</sourceFile> 
<targetFile/> 
</unit> 

</body> 

可有人告訴我,我怎麼會通過C#中使用LINQ到XML閱讀的資源文件節點的值,並更新爲的TargetFile的價值我不熟悉LINQ to XML?

謝謝。

回答

5

事情是這樣的:

XDocument doc = XDocument.Load("file.xml"); 
foreach (var sourceNode in doc.Descendants("sourceFile")) 
{ 
    XElement targetNode = sourceNode.Parent.Element("targetFile"); 
    if (targetNode != null) 
    { 
     targetNode.Value = sourceNode.Value; 
    } 
} 

或者:

XDocument doc = XDocument.Load("file.xml"); 
foreach (var unitNode in doc.Descendants("unit")) 
{ 
    XElement sourceNode = unitNode.Element("sourceFile"); 
    XElement targetNode = unitNode.Element("targetFile"); 
    if (sourceNode != null && targetNode != null) 
    { 
     targetNode.Value = sourceNode.Value; 
    } 
} 

(而且事後打電話doc.Save如果你想回保存到一個文件,當然,作爲另一個答案指出)

+0

+1:嚴格來說這是否被認爲是linq-to-xml?我知道XDocument是System.Xml.Linq命名空間的一部分 – Alan 2011-03-17 16:56:45

+0

@Alan:爲什麼它不是?哪一位不是LINQ to XML的一部分? LINQ to XML就是XML API ......如果你想要涉及到Select,Where等的查詢,那只是使用LINQ to Objects *與* LINQ to XML。 – 2011-03-17 16:57:52

+0

好吧,我看到你的觀點,但是我不會說選擇,哪裏屬於LINQ to Objects。這些是組成linq的標準查詢的一部分。 – Alan 2011-03-17 17:15:25

1

要更新實際的文件本身,您只需在加載的文檔上調用Save()方法。

string path = "yourfile.xml"; 
    XDocument doc = XDocument.Load(path); 
    foreach (XElement unit in doc.Descendants("unit")) 
    { 
     XElement source = unit.Element("sourceFile"); 
     XElement target = unit.Element("targetFile"); 
     target.Value = source.Value; // or whatever 
    } 
    doc.Save(path);