我有一个以下的xml文件。我需要更改 ANY标记的内部文本,其中包含值«博物馆»,或者只是一个标记作为开头:
<src>
<riga>
<com>¾</com>
<riquadro797>Direction to move</riquadro797>
</riga>
<riga>
<llt>
<com>Museum</com>
<elemento797>Direction not to move</elemento797>
</llt>
</riga>
<operation>
<com> </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+"']");
怎么做?任何帮助将不胜感激!
答案 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+"']");