我将这个肥皂反应从肥皂信封中剥离出来:
<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>
答案 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");