C# 要在XML文件中的特定位置插入XML元素吗
我有一个这样的XML文件C# 要在XML文件中的特定位置插入XML元素吗,c#,xml,C#,Xml,我有一个这样的XML文件 <RoadPart> <Vehicles> <ConfigurationSummaryListPosition> <ConfigurationSummary>Test name</ConfigurationSummary> </ConfigurationSummaryListPosition>
<RoadPart>
<Vehicles>
<ConfigurationSummaryListPosition>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPosition>
</Vehicles>
<Vehicles>
<ConfigurationSummaryListPosition>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPosition>
</Vehicles>
<Vehicles>
<ConfigurationSummaryListPosition>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPosition>
</Vehicles>
</RoadPart>
我想在下面的XML中插入我希望的位置
<Vehicles>
<ConfigurationSummaryListPositionTest>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPositionTest>
</Vehicles>
假设我想在第二个位置插入Vehicles元素,结果如下:
<RoadPart>
<Vehicles>
<ConfigurationSummaryListPosition>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPosition>
</Vehicles>
<Vehicles> // My inserted data
<ConfigurationSummaryListPositionTest> // My inserted data
<ConfigurationSummary>Test name</ConfigurationSummary> // My inserted data
</ConfigurationSummaryListPositionTest> // My inserted data
</Vehicles> // My inserted data
<Vehicles>
<ConfigurationSummaryListPosition>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPosition>
</Vehicles>
<Vehicles>
<ConfigurationSummaryListPosition>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPosition>
</Vehicles>
</RoadPart>
如何在特定位置插入车辆元件零件帮助我。如果您知道要放置新元件后的元件,请使用XDocument.AddAfterSelf方法。或XDocument.AddBeforeSelf放置在给定元素之前。尝试以下操作:
XElement root = XElement.Parse(@"
<RoadPart>
<Vehicles>
<ConfigurationSummaryListPosition>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPosition>
</Vehicles>
<Vehicles>
<ConfigurationSummaryListPosition>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPosition>
</Vehicles>
<Vehicles>
<ConfigurationSummaryListPosition>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPosition>
</Vehicles>
</RoadPart>
");
XElement toAdd = XElement.Parse(@"
<Vehicles>
<ConfigurationSummaryListPositionTest>
<ConfigurationSummary>Test name</ConfigurationSummary>
</ConfigurationSummaryListPositionTest>
</Vehicles>
");
root.Elements().Skip(1).First().AddBeforeSelf(toAdd);
//Alternatively
root.Elements().Take(1).Last().AddAfterSelf(toAdd);
要插入多个元素,每个元素都有自己的索引:
由于您还没有展示索引如何映射到要插入的元素,因此我将假设使用字典
注意:这将在一个不存在的索引上崩溃。您使用XDocument还是XmlDocument?我使用的XDocument可能是的副本。如果我有一个列表,其中包含在XML文件中插入车辆元素的索引,那么我如何动态执行此操作。@TejasThakor您使用的列表应该是您问题的一部分。@TejasThakor是否插入多次使用同一元素,还是每次使用不同的元素?如果是不同的元素,索引如何映射到相应的元素?我希望每次都插入不同的元素,每次都必须在XML中的某个索引位置插入元素。例如,如果我希望在两者之间插入元素?
var dict = new Dictionary<int, XElement>() {
{3, XElement.Parse("<Inserted id=\"1\" />")},
{1, XElement.Parse("<Inserted id=\"2\" />")}
};
//We need parse the elements to insert in descending order, or else the indexes
//will be affected by previous insertions
foreach (var kvp in dict.OrderByDescending(kvp => kvp.Key)) {
if (kvp.Key == 0) {
root.AddFirst(kvp.Value);
} else {
root.Elements().Take(kvp.Key).Last().AddAfterSelf(kvp.Value);
}
}