【问题标题】:Want to insert XML elements at particular position in XML file想要在 XML 文件的特定位置插入 XML 元素
【发布时间】:2015-10-26 10:53:14
【问题描述】:

我有一个这样的 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>

如何在特定位置插入车辆元素零件帮助我。

【问题讨论】:

标签: c# xml


【解决方案1】:

如果您知道要放置新元素之后的元素,请使用 XDocument.AddAfterSelf 方法 (MSDN)。或 XDocument.AddBeforeSelf 放置在给定元素之前。

【讨论】:

    【解决方案2】:

    试试这个:

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

    要插入多个元素,每个元素都有自己的索引:

    (由于您还没有显示您的索引如何映射到要插入的元素,我假设为 Dictionary&lt;int,XElement&gt;。)

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

    注意:这将在不存在的索引上崩溃。

    【讨论】:

    • 如果我有一个列表,其中包含在 XML 文件中插入车辆元素的索引,那么我如何动态执行此操作。
    • @TejasThakor 您正在使用的列表应该是您问题的一部分。
    • @TejasThakor 你想多次插入相同的元素,还是每次都插入不同的元素?如果元素不同,索引如何映射到适当的元素?
    • 我想每次都插入不同的元素,每次我都必须在 XML 中的某个索引位置插入元素。例如,如果我想在两者之间插入元素?
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 2021-07-24
    相关资源
    最近更新 更多