C#按索引删除特定位置的xml标记

时间:2016-06-09 11:01:24

标签: c# xml

我将这个肥皂反应从肥皂信封中剥离出来:

<GetCaseDetailsResponse xmlns="http://tempuri.org/">
  <GetCaseDetailsResult>
    <Cases>
      <Name xsi:type="xsd:string">noob</Name>
      <Description xsi:type="xsd:string">Student</Description>
      <Ref xsi:type="xsd:string">1234</Ref>
      <Status xsi:type="xsd:string">Open</Status>
    </Cases>
  </GetCaseDetailsResult>
</GetCaseDetailsResponse>

我想摆脱标记<GetCaseDetailsResult>(及其结束部分),但内容保持不变。我不能使用标签名称,我必须尽可能地使用标签名称,这就是为什么我认为通过索引删除是最好的解决方案。到目前为止,我还没有找到一种不删除子节点的方法。

这应该是最终结果:

<GetCaseDetailsResponse xmlns="http://tempuri.org/">

        <Cases>
          <Name xsi:type="xsd:string">noob</Name>
          <Description xsi:type="xsd:string">Student</Description>
          <Ref xsi:type="xsd:string">1234</Ref>
          <Status xsi:type="xsd:string">Open</Status>
        </Cases>

</GetCaseDetailsResponse>

2 个答案:

答案 0 :(得分:0)

假设您修复了XML代码段以包含xmlns:xsi声明,以使其有效,您可以使用ReplaceWith XElement方法替换第一个子句({{ 1}})具有第一个孩子的孩子的根元素,如下所示:

GetCaseDetailsResult

输出:

var doc = XDocument.Load(path_to_xml);
doc.Root.FirstNode.ReplaceWith(((XElement)doc.Root.FirstNode).Elements());
Console.WriteLine(doc.ToString());

答案 1 :(得分:0)

试试这个

XDocument doc = XDocument.Load("input.xml");
var q = from node in doc.Descendants("Setting")
        let attr = node.Attribute("name")
        where attr != null && attr.Value == "File1"
        select node;
q.ToList().ForEach(x => x.Remove());
doc.Save("output.xml");