如何查找和更改xml元素的内部文本? C#

时间:2014-11-25 13:09:30

标签: c# .net xml xelement

我有一个以下的xml文件。我需要更改 ANY标记的内部文本,其中包含值«博物馆»,或者只是一个标记作为开头:

<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。我尝试了什么,它不起作用:

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

此代码不正确,因为我无法预测哪个元素将包含“博物馆”:

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

怎么做?任何帮助将不胜感激!

3 个答案:

答案 0 :(得分: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 :(得分:1)

Elements()仅查看层次结构中的单个级别。我想你想要Descendants()而不是......

答案 2 :(得分:1)

如果您需要更老的XPath选项,则需要在树上进行全局搜索 - 您可以使用// XPath表达式:

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