2014-11-25 73 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+"']");