编辑 XDocument 中的现有元素

Edit existing element in XDocument

我找到了这个主题并将其改编为我的 XML 文件

我的 XML 代码如下所示

<body>


    <id>1</id>
      <disc>B</disc>
      <type>Mark</type>
      <value>5</value>


    <id>2</id>
      <disc>A</disc>
      <type>Mark</type>
      <value>10</value>
    </body>

和 C# 代码到 select 并编辑特定记录看起来像

try
            {
                var target = doc
              .DescendantsAndSelf("body")
              .Where(e => e.Element("disc").Value == Disc
                  && e.Element("type").Value.ToString().Equals(Type.ToString())
                  && e.Element("value").Value.ToString().Equals(OldMark.ToString()))
              .Single();



                Debug.WriteLine(target.ToString());
            }
            catch (Exception)
            {

                throw;
            }

问题是它 returns 整个文档,我不明白为什么。

我使用 XDocument,该应用专为 WP8.1 设计

你能帮我解决这个问题吗?

谢谢!

方法DescendantsAndSelf(XName name) returns 每个具有匹配名称的元素和该元素的所有后代元素 (MSDN)。在您的情况下,这是 body 元素及其子元素。

您可能希望像下面这样构造您的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<body>
   <someElement>
      <id>1</id>
      <disc>B</disc>
      <type>Mark</type>
      <value>5</value>
   </someElement>
   <someElement>
      <id>2</id>
      <disc>A</disc>
      <type>Mark</type>
      <value>10</value>
   </someElement>
</body>

所以你可以像这样获得单个 someElement XML 节点:

var target = doc.DescendantsAndSelf("someElement")
              .Where(e => e.Element("disc").Value == Disc
                  && e.Element("type").Value.ToString().Equals(Type.ToString())
                  && e.Element("value").Value.ToString().Equals(OldMark.ToString()))
              .Single();

Debug.WriteLine(target.ToString());