2014-11-25 106 views
-1

我有一個下面的xml文件。我需要改變的內文本的啓動任何標籤,其中包含了價值«博物館»,或只是一個標籤:如何查找和更改xml元素的內部文本? C#

<src> 
    <riga> 
     <com>&#190;</com> 
     <riquadro797>Direction to move</riquadro797> 
    </riga> 
    <riga> 
     <llt> 
     <com>Museum</com> 
     <elemento797>Direction not to move</elemento797> 
     </llt> 
    </riga> 
    <operation> 
     <com>&#160;</com> 
     <riquadro797>Museum</riquadro797> 
    </operation> 
    <riga> 
    <gt> 
     <elemento797>Direction not to move</elemento797> 
    </gt> 
</riga>  
</src> 

我分析這個文件的XElement。我已經試過它的DOS不行:

var tt = xmlCluster.Elements(First(x => x.Value == "Museum");    

此代碼是不正確的,因爲我無法預測哪個元素將包含「博物館」:

var el = rootElRecDocXml.SelectSingleNode("src/riga/gt/elemento797[text()='"+mFilePath+"']"); 

怎麼辦呢?任何幫助將不勝感激!

+0

你甚至嘗試在'解析XElement C#'的谷歌搜索# – MethodMan 2014-11-25 13:16:21

回答

4

只是抓住所有元素與Museum值:

var doc = XDocument.Parse(xml); 
var elements = doc.Descendants().Where(e => e.Value == "Museum"); 

foreach (var ele in elements) 
    ele.Value = "Test"; 

//doc is updated with new values 

爲Selman22指出,DOC將只是你的XML的工作副本。您需要撥打doc.Save將任何內容應用到磁盤或任何需要的地方

+1

你應該注意,這種改變不會影響實際的文件,除非你保存它。 – 2014-11-25 13:31:27

+0

@ Selman22爲什麼在地球上你不得不告訴一個人。 '請注意,除非你保存它,否則任何東西都不會被保存......呃? – DidIReallyWriteThat 2014-11-25 13:56:48

+2

,因爲它是真的。之前沒有將Linq用於XML的人可能會認爲這會影響文檔本身。上帝你沒有看到足夠的問題,否則你會明白我的觀點。 – 2014-11-25 14:00:00

1

元素()僅在層次結構中查看單個級別。我想你想後裔(),而不是...

1

如果你想要一箇舊學校的XPath選項,你需要做的樹進行全局搜索 - 您可以使用// XPath表達式此:

var els = rootElRecDocXml.SelectNodes("//[text()='"+mFilePath+"']");