Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 要在XML文件中的特定位置插入XML元素吗_C#_Xml - Fatal编程技术网

C# 要在XML文件中的特定位置插入XML元素吗

C# 要在XML文件中的特定位置插入XML元素吗,c#,xml,C#,Xml,我有一个这样的XML文件 <RoadPart> <Vehicles> <ConfigurationSummaryListPosition> <ConfigurationSummary>Test name</ConfigurationSummary> </ConfigurationSummaryListPosition>

我有一个这样的XML文件

<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);
    }
}