【问题标题】:Replace elements in XML替换 XML 中的元素
【发布时间】:2015-10-27 18:30:56
【问题描述】:

我有如下显示 RoadPart 和 Vehicles 元素的 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>

我有一个变量

var test = @"<DataType>
                <ConfigurationSummaryListPositionType>
                  <ConfigurationSummaryType> name </ConfigurationSummaryType>
                </ConfigurationSummaryListPositionType>
            </DataType>
            <DataType>
                <ConfigurationSummaryListPositionType>
                  <ConfigurationSummaryType> Test</ConfigurationSummaryType>
                </ConfigurationSummaryListPositionType>
            </DataType>";

想用可变输出替换车辆元素应该如下:

<RoadPart>
    <DataType>
        <ConfigurationSummaryListPositionType>
          <ConfigurationSummaryType> name </ConfigurationSummaryType>
        </ConfigurationSummaryListPositionType>
    </DataType>
    <DataType>
        <ConfigurationSummaryListPositionType>
          <ConfigurationSummaryType> Test</ConfigurationSummaryType>
        </ConfigurationSummaryListPositionType>
    </DataType>
</RoadPart>

帮我解决这个问题

【问题讨论】:

  • "&lt;RoadPart&gt;" + var + "&lt;/RoadPart&gt;" 可能不是您要找的答案。 VehiclesDataType 元素有什么关系?还是应该删除所有 Vehicles 并添加所有 DataType 元素?
  • 是的,我想移除所有车辆并添加变量。帮我解决这个问题
  • 我们需要澄清一下。 “测试名称”是否相关, 标签的数量是否重要,...
  • 我现在用名字改变了变量。

标签: c# xml


【解决方案1】:

为什么不使用 linq 读取 xml,重复每个节点并更改该节点值。

var nodes = (from node in document.Descendant("RoadPart") select node);

其中document是加载的xml文件

var document = XDocument.Load("your xml file path");

然后像这样在文档中迭代 foreach 节点

foreach (var node in nodes)
{
    // do something
}

【讨论】:

    【解决方案2】:

    这将返回结果为System.Xml.Linq.XElement:

    test = string.Concat("<root>", test, "</root>"); // set dummy root
    XDocument xdoc = XDocument.Parse(test);
    
    XElement replaced = new XElement("RoadPart", xdoc.Descendants("DataType").Select(e => e));
    

    如果要将结果保存为文件,

    using (FileStream fs = new FileStream("{filePath}", FileMode.Create))
    {
        replaced.Save(fs);
        fs.Close();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 2011-06-06
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      相关资源
      最近更新 更多