我正在使用XElement的ReplaceAll
功能。我有以下必须替换的图像元素:
<image x="773.35399" y="1175.40315" .... />
当我用以下元素替换上面的元素时:
<image x="23" y="11" .../>
在调用ReplaceAll函数之后创建了一个额外的元素,并且替换的元素被包装在其中。意味着上述替换结果将是:
<image>
<image x="23" y="11" .../>
</image>
我不想在一个额外的元素中包裹被替换的元素。我该如何阻止这种行为?
答案 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代替。