删除父节点但不删除子节点XmlElement

时间:2018-06-07 12:10:11

标签: c# xml

我需要摆脱我的父节点,而不是我的子节点。

以下是它的表现:

<?xml version="1.0" encoding="utf-8"?>
<ns0:MisMessage>
  <mislife>
    <party/>
    <datetime>2018-06-04T09:35:33</datetime>
    <insurance">
      <number>123</number>
      <amount>3</amount>
      <indicator></indicator>
      <text>asd</text>
    </insurance>
  </mislife>
  <ns0:Message/>
</ns0:MisMessage>

以下是我希望它能够照顾我完成的事情。

 <mislife>
   <party/>
   <datetime>2018-06-04T09:35:33</datetime>
   <insurance">
     <number>123</number>
     <amount>3</amount>
     <indicator></indicator>
     <text>asd</text>
   </insurance>
 </mislife>

有没有简单的方法可以做到这一点?我尝试过并尝试过。我一直在寻找互联网,我无法找到如何做到这一点。我要删除的东西将始终命名为ns0:在beggning中。我可以通过删除子串来实现吗?谢谢!

我解决了它,如下所示,我将XMLDocument转换为XDocument,然后使用后代。就像@bommelding在他的例子中所表现的那样。谢谢大家!

var xDocument = ToXDocument(xmlDocument);
if (xDocument != null)
{
    var mislife = xDocument.Descendants("mislife").FirstOrDefault();
    if (mislife != null)
    {
        return mislife;
    }
}

public static XDocument ToXDocument(XmlDocument xmlDocument)
{
    using (var nodeReader = new XmlNodeReader(xmlDocument))
    {
        nodeReader.MoveToContent();
        return XDocument.Load(nodeReader);
    }
}

2 个答案:

答案 0 :(得分:0)

XDocument doc = XDocument.Load(fileName);
XElement data = doc
      .Descendants("mislife")  // find your target
      .Single();               // be brave, there should be exactly 1
data.Save(otherFileName);      // saves with document <? ... ?>

答案 1 :(得分:0)

使用Linq的简单方法(记得使用System.Xml.Linq添加;):

MnemonicHandler

doc将是没有根元素的xml

XDocument可以从带有

的文件加载
string testxml = @"
<?xml version=""1.0"" encoding=""UTF-8""?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>";

XDocument doc = XDocument.Parse(testxml).Descendants().First().Document;

或像我一样阅读XML

XDocument.Load("path");

还有其他选择。

结果是:

Xml.Parse("<xml....>");