Xml Linq,删除 XElement C# 中的重复节点

发布于 2024-09-30 01:58:32 字数 2306 浏览 0 评论 0原文

我使用 Xml.Linq 来管理 xml 配置文件。

我有 XElement (Company.CalidadCodigo.ParserSQL.Reglas),我需要删除 XElement 中的重复值(节点 Add-Key-Value,其中值重复)。

我用 Union 但不对。

var reglasComunes = reglasParaTarget.Union(reglasParaSecundario);

有关于它的示例代码吗?

 <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="Company.CalidadCodigo.ParserSQL.Reglas" type="System.Configuration.NameValueSectionHandler" />
      </configSections>
      <appSettings></appSettings>
       <Company.CalidadCodigo.ParserSQL.Reglas>
    <add key="AnalisisSintactico" value="CalidadCodigo.ParserSQL.Reglas.AnalisisSintactico,CalidadCodigo.ParserSQL.AnalisisSintactico, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="AnalisisRecomendaciones" value="CalidadCodigo.ParserSQL.Reglas.AnalisisRecomendaciones,CalidadCodigo.ParserSQL.AnalisisRecomendaciones, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="FinFichero" value="CalidadCodigo.ParserSQL.Reglas.FinFichero,CalidadCodigo.ParserSQL.FinFichero, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="CheckTree" value="CalidadCodigo.ParserSQL.Reglas.CheckTreeException,CalidadCodigo.ParserSQL.FinFichero, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="AnalisisSintactico" value="CalidadCodigo.ParserSQL.Reglas.AnalisisSintactico,CalidadCodigo.ParserSQL.AnalisisSintactico, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="Regla1" value="CalidadCodigo.ParserSQL.Reglas.Regla1,CalidadCodigo.ParserSQL.Regla1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="Regla2" value="CalidadCodigo.ParserSQL.Reglas.Regla2,CalidadCodigo.ParserSQL.Regla2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="CheckTree" value="CalidadCodigo.ParserSQL.Reglas.CheckTreeException,CalidadCodigo.ParserSQL.FinFichero, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />

  </Company.CalidadCodigo.ParserSQL.Reglas>
    </configuration>

I use Xml.Linq for manage xml configuration files.

I have XElement (Company.CalidadCodigo.ParserSQL.Reglas), and I need remove duplicate values in XElement (nodes Add-Key-Value, which Value is repeated).

I use Union but not right.

var reglasComunes = reglasParaTarget.Union(reglasParaSecundario);

Any sample code about it?

 <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="Company.CalidadCodigo.ParserSQL.Reglas" type="System.Configuration.NameValueSectionHandler" />
      </configSections>
      <appSettings></appSettings>
       <Company.CalidadCodigo.ParserSQL.Reglas>
    <add key="AnalisisSintactico" value="CalidadCodigo.ParserSQL.Reglas.AnalisisSintactico,CalidadCodigo.ParserSQL.AnalisisSintactico, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="AnalisisRecomendaciones" value="CalidadCodigo.ParserSQL.Reglas.AnalisisRecomendaciones,CalidadCodigo.ParserSQL.AnalisisRecomendaciones, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="FinFichero" value="CalidadCodigo.ParserSQL.Reglas.FinFichero,CalidadCodigo.ParserSQL.FinFichero, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="CheckTree" value="CalidadCodigo.ParserSQL.Reglas.CheckTreeException,CalidadCodigo.ParserSQL.FinFichero, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="AnalisisSintactico" value="CalidadCodigo.ParserSQL.Reglas.AnalisisSintactico,CalidadCodigo.ParserSQL.AnalisisSintactico, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="Regla1" value="CalidadCodigo.ParserSQL.Reglas.Regla1,CalidadCodigo.ParserSQL.Regla1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="Regla2" value="CalidadCodigo.ParserSQL.Reglas.Regla2,CalidadCodigo.ParserSQL.Regla2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />
    <add key="CheckTree" value="CalidadCodigo.ParserSQL.Reglas.CheckTreeException,CalidadCodigo.ParserSQL.FinFichero, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9744987c0853bf9e" />

  </Company.CalidadCodigo.ParserSQL.Reglas>
    </configuration>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

余生一个溪 2024-10-07 01:58:32

以下为您提供不同的行。

XDocument doc = new XDocument(new XElement("doc"
    , new XElement("add", new XAttribute("value", "11"))
    , new XElement("add", new XAttribute("value", "23"))
    , new XElement("add", new XAttribute("value", "22"))
    , new XElement("add", new XAttribute("value", "22"))
    , new XElement("add", new XAttribute("value", "22"))
    , new XElement("add", new XAttribute("value", "11"))));

//Select Distinct Rows, gives 11,23,22
var result =
    from row in doc.Descendants("add")
    group row by (string)row.Attribute("value") into g
    select g.First();

Following gives you the distinct rows.

XDocument doc = new XDocument(new XElement("doc"
    , new XElement("add", new XAttribute("value", "11"))
    , new XElement("add", new XAttribute("value", "23"))
    , new XElement("add", new XAttribute("value", "22"))
    , new XElement("add", new XAttribute("value", "22"))
    , new XElement("add", new XAttribute("value", "22"))
    , new XElement("add", new XAttribute("value", "11"))));

//Select Distinct Rows, gives 11,23,22
var result =
    from row in doc.Descendants("add")
    group row by (string)row.Attribute("value") into g
    select g.First();
手心的温暖 2024-10-07 01:58:32

尝试将它们分组为不同的值,如下所示:

XDocument doc = XDocument.Load(@"config.xml");
var query = from company in doc.Descendants("Company.CalidadCodigo.ParserSQL.Reglas")
   from keys in company.Descendants()
   group keys by keys.Attribute("value").Value into distinctResult
   select new { key = distinctResult.FirstOrDefault().Attribute("key").Value, value = distinctResult.Key };


foreach (var result in query)
 Console.WriteLine("key: " + result.key);

输出:

key: AnalisisSintactico
key: AnalisisRecomendaciones
key: FinFichero
key: CheckTree
key: Regla1
key: Regla2

Try group them into distinct values as follow:

XDocument doc = XDocument.Load(@"config.xml");
var query = from company in doc.Descendants("Company.CalidadCodigo.ParserSQL.Reglas")
   from keys in company.Descendants()
   group keys by keys.Attribute("value").Value into distinctResult
   select new { key = distinctResult.FirstOrDefault().Attribute("key").Value, value = distinctResult.Key };


foreach (var result in query)
 Console.WriteLine("key: " + result.key);

OUTPUT:

key: AnalisisSintactico
key: AnalisisRecomendaciones
key: FinFichero
key: CheckTree
key: Regla1
key: Regla2
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文