XElement ReplaceAll函数的问题

本文关键字:问题 函数 ReplaceAll XElement | 更新日期: 2023-09-27 17:50:43

我使用XElement的ReplaceAll函数。我有以下图像元素,我必须替换:

<image x="773.35399" y="1175.40315" .... />

当我用以下元素替换上面的元素时:

<image x="23" y="11" .../>

在调用ReplaceAll函数之后创建一个额外的元素,被替换的元素被包装在其中。表示上述替换结果将为:

  <image>
    <image x="23" y="11" .../>
  </image>

我不想在一个额外的元素中包装被替换的元素。

XElement ReplaceAll函数的问题

ReplaceWith方法代替ReplaceAll方法。后者替换子节点和元素的属性,而不是替换元素本身。

XDocument xdoc = XDocument.Load(path_to_xml);
xdoc.Root.Element("image")
         .ReplaceWith(new XElement("image", 
              new XAttribute("x", 23),
              new XAttribute("y", 11)));
xdoc.Save(path_to_xml);

最有可能的是你在"image"节点上调用ReplaceAll -它将用新内容替换它的所有子节点。在您的示例中,"replace子节点"(调用之前没有)将简单地添加新的"image"节点作为子节点,正如您所看到的。

您可能需要XElement。ReplaceWith。