首页 > 解决方案 > 在 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");

我能知道我哪里出错了,正确的方法是什么?

标签: c#xmlvisual-studiolinq

解决方案


目前尚不清楚您是否有多个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");

笔记:

XPathusing System.Xml.XPath命名空间中。


推荐阅读