从XML删除特定的节点 [英] Remove a particular node from XML

查看:96
本文介绍了从XML删除特定的节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何删除"

<enrichment-required>mf_compliant</enrichment-required>

节点?

" node from the below XML in c#?

<?xml version="1.0" encoding="utf-8"?>
<request>
    <user-info>
        <app-id />
        <license-key />
        <site-id />
        <request-timestamp>2012-08-24T16:22:48</request-timestamp>
    </user-info>

    <enrichment-request>
        <dr-nbr>200700611609__8_13000</dr-nbr>
        <mf-target-edition>MF_2012</mf-target-edition>
        <enrich>
            <enrichment-required>mf_compliant</enrichment-required>
            <enrichment-required>mf-source-edition-group</enrichment-required>
            <enrichment-required>division</enrichment-required>
            <enrichment-required>section</enrichment-required>
            <enrichment-required>part</enrichment-required>
            <enrichment-required>products</enrichment-required>
            <enrichment-required>manufacturers</enrichment-required>
            <enrichment-required>brands</enrichment-required>
            <enrichment-required>trades</enrichment-required>


        </enrich>

        <enrich-details entity="division">
            <enrich-level key="boundary">yes</enrich-level>
            <enrich-level>source_id</enrich-level>
            <enrich-level>source_title</enrich-level>
            <enrich-level>normalized_id</enrich-level>
            <enrich-level>normalized_title</enrich-level>
        </enrich-details>
    </enrichment-request>
</request>

推荐答案

尝试一下
XmlDocument doc = new XmlDocument();
doc.Load(XmlfileName);
XmlNodeList xnList = doc.SelectNodes("request/enrichment-request/enrich/enrichment-required");
            foreach (XmlNode xn in xnList)
            {
                if (xn.FirstChild.Value == "mf_compliant")
                { 
                xn.RemoveChild(xn.FirstChild);
                }
            }
doc.Save(XmlfileName);


// Input File Path.
XDocument doc = XDocument.Load("input.xml");

var q = from node in doc.Descendants("enrichment-required")
        where node != null && node.Value == "mf_compliant"
        select node;

q.ToList().ForEach(x => x.Remove());

// Output File Path.
doc.Save("output.xml");


这里是一个快速而肮脏的解决方案,我对此进行了简短的测试,这是我想到的最快的解决方案.可能有一些更好的解决方案:
Here is a quick and dirty solution, i tested it briefly and that was the fastest I came up with. Probably there are some nicer solutions:
XmlDocument document = new XmlDocument();
document.Load("C:\\Temp\\New.xml");
XmlNode nodeReq = document.SelectSingleNode("request");
if (nodeReq != null)
{
   XmlNode nodeEnReq = nodeReq.SelectSingleNode("enrichment-request");
   if (nodeEnReq != null)
   {
      XmlNode nodeEnrich = nodeEnReq.SelectSingleNode("enrich");
      if (nodeEnrich != null)
      {
         foreach (XmlNode node in nodeEnrich.ChildNodes)
         {
            if (node.InnerText == "mf_compliant")
               nodeEnrich.RemoveChild(node);
         }
      }
   }
}
document.Save("C:\\Temp\\New.xml");


这篇关于从XML删除特定的节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆