将 XML-element 替换为 LINQ to XML
Replace XML-element with LINQ to XML
如果可能,我想 使用 LINQ to XML 解决以下问题。使用 LINQ to XML 可能不是解决此类问题的合适方法?如果不是,最好的技术是什么?所有元素都是这样的:
<Name>XXX</Name>
应替换为:
<Attribute name="Name">XXX</Attribute>
在下面XML?
<Object type="SignalGroup">
<Name>General</Name>
<Object type="Signal">
<Name>Input</Name>
<Attribute name="Description">This is a public object.</Attribute>
</Object>
<Object type="Signal">
<Name>PublicName</Name>
<Attribute name="ToolTitle">Public name</Attribute>
<Attribute name="Description">This is a public object.</Attribute>
</Object>
</Object>
期望的结果是:
<Object type="SignalGroup">
<Attribute name="Name">General</Attribute>
<Object type="Signal">
<Attribute name="Name">Input</Attribute>
<Attribute name="Description">This is a public object.</Attribute>
</Object>
<Object type="Signal">
<Attribute name="Name">PublicName</Attribute>
<Attribute name="ToolTitle">Public name</Attribute>
<Attribute name="Description">This is a public object.</Attribute>
</Object>
</Object>
您想查询名称为 Name
和 的所有元素,或者 重命名该元素并添加缺少的属性, 或 将它们替换为具有该元素值的 Attribute
元素。
所以要么这样:
foreach (var name in doc.Descendants("Name"))
{
name.Name = "Attribute";
name.Add(new XAttribute("name", "Name"));
}
或者这个。请注意,此处需要 ToList
,因为替换该元素会破坏枚举,因为您将从文档中删除了当前元素。
foreach (var name in doc.Descendants("Name").ToList())
{
var attr = new XElement("Attribute",
new XAttribute("name", "Name"), name.Value);
name.ReplaceWith(attr);
}
有关演示,请参阅 this fiddle。
如果可能,我想 使用 LINQ to XML 解决以下问题。使用 LINQ to XML 可能不是解决此类问题的合适方法?如果不是,最好的技术是什么?所有元素都是这样的:
<Name>XXX</Name>
应替换为:
<Attribute name="Name">XXX</Attribute>
在下面XML?
<Object type="SignalGroup">
<Name>General</Name>
<Object type="Signal">
<Name>Input</Name>
<Attribute name="Description">This is a public object.</Attribute>
</Object>
<Object type="Signal">
<Name>PublicName</Name>
<Attribute name="ToolTitle">Public name</Attribute>
<Attribute name="Description">This is a public object.</Attribute>
</Object>
</Object>
期望的结果是:
<Object type="SignalGroup">
<Attribute name="Name">General</Attribute>
<Object type="Signal">
<Attribute name="Name">Input</Attribute>
<Attribute name="Description">This is a public object.</Attribute>
</Object>
<Object type="Signal">
<Attribute name="Name">PublicName</Attribute>
<Attribute name="ToolTitle">Public name</Attribute>
<Attribute name="Description">This is a public object.</Attribute>
</Object>
</Object>
您想查询名称为 Name
和 的所有元素,或者 重命名该元素并添加缺少的属性, 或 将它们替换为具有该元素值的 Attribute
元素。
所以要么这样:
foreach (var name in doc.Descendants("Name"))
{
name.Name = "Attribute";
name.Add(new XAttribute("name", "Name"));
}
或者这个。请注意,此处需要 ToList
,因为替换该元素会破坏枚举,因为您将从文档中删除了当前元素。
foreach (var name in doc.Descendants("Name").ToList())
{
var attr = new XElement("Attribute",
new XAttribute("name", "Name"), name.Value);
name.ReplaceWith(attr);
}
有关演示,请参阅 this fiddle。