XElement ReplaceAll函数问题

时间:2013-01-04 06:53:34

标签: c# xml linq-to-xml

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

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

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

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

在调用ReplaceAll函数之后创建了一个额外的元素,并且替换的元素被包装在其中。意味着上述替换结果将是:

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

我不想在一个额外的元素中包裹被替换的元素。我该如何阻止这种行为?

2 个答案:

答案 0 :(得分:1)

使用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);

答案 1 :(得分:1)

大多数人都在“图像”节点本身上调用ReplaceAll - 这将用新内容替换其所有子节点。在您的情况下,“替换子节点”(它在调用之前没有)将简单地添加新的“图像”节点作为孩子完全如您所见。

您可能需要XElement.ReplaceWith代替。