1

我正在使用 XElement 的ReplaceAll功能。我有以下必须替换的图像元素:

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

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

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

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

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

我不想将替换的元素包裹在额外的元素中。我怎样才能阻止这种行为?

4

2 回答 2

1

Use ReplaceWith method instead of ReplaceAll. Latter one replaces child nodes and the attributes of element, instead of replacing element itself.

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);
于 2013-01-04T06:57:48.633 回答
1

您最可能在“图像”节点本身上调用ReplaceAll - 这将用新内容替换其所有子节点。在您的情况下,“替换子节点”(它在调用之前没有)将简单地添加新的“图像”节点作为子节点,就像您看到的那样。

您可能想要XElement.ReplaceWith代替。

于 2013-01-04T07:03:14.713 回答