编辑XDocument中的现有元素

时间:2015-03-23 10:22:01

标签: c# xml windows-phone-8

我找到了这个主题并将其改编为我的XML文件https://stackoverflow.com/a/18509248

我的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#代码选择和编辑某些记录,如

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;
            }

问题是它返回整个文档,我无法弄清楚原因。

我使用XDocument,该应用程序专为WP8.1

设计

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

谢谢!

1 个答案:

答案 0 :(得分:0)

方法DescendantsAndSelf(XName name)返回具有匹配名称的每个元素以及此元素的所有后代元素(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());