c# - 在 C# 中使用 linq 更改 xml 值
问题描述
自过去 2 小时以来,我一直在处理这个问题。我有一个看起来像这样的 XML 文件
<catalog>
<captureInfo>
<row>5</row>
<col>5</col>
</captureInfo>
<patientInfo>
<name>XYZ</name>
<detail>details here</detail>
</patientInfo>
<imageData>
<r0c0>
<contrastFlag>true</contrastFlag>
</r0c0>
<imageData>
<catalog>
我想改变 contrastFlag 的值。我试过这个,但它不工作
XDocument xdoc = XDocument.Load(filename)
xdoc.Element("catalog")
.Element("imageData")
.Descendants()
.Where(x => x.Value == "r0c0")
.First()
.SetElementValue("contrastFlag", "newValue");
doc.Save("XMLFile1.xml");
我能知道我哪里出错了,正确的方法是什么?
解决方案
目前尚不清楚您是否有多个contrastFlag
元素。
如果只有一个,你可以简单地这样做:
XDocument xdoc = XDocument.Load(filename);
var element = xdoc.Root.Descendants("contrastFlag").FirstOrDefault();
if (element != null)
element.Value = "false";
xdoc.Save("sample1.xml");
如果您有多个元素,则可以XPath
改用:
XDocument xdoc = XDocument.Load(filename);
var element = xdoc.Root.XPathSelectElement("//catalog//imageData//r0c0//contrastFlag");
if (element != null)
element.Value = "false";
xdoc.Save("sample1.xml");
笔记:
XPath
在using System.Xml.XPath
命名空间中。
推荐阅读
- php - PHP一次发送多个api请求
- vue.js - 返回父级时未呈现Vue-router路由
- machine-learning - Keras 中深度学习模型的实现
- blockchain - 获取 Solidity 映射的密钥
- telegram - 如何在电报中创建带有标记但没有文本的消息?
- php - 从数据库表在新窗口中打开链接不起作用
- php - 如何根到没有特定名称的文件夹?
- python - 在派生类中测试类属性的存在,但在父类中不存在
- java - 使用launch4j将.jar转换为exe时应该捆绑哪个版本的JRE
- firefox-developer-tools - 如何“挑选”一个完全被另一个元素 z 遮挡的元素?