我使用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>
答案 0 :(得分:2)
以下为您提供了不同的行。
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();
答案 1 :(得分:1)
尝试将它们分组为不同的值,如下所示:
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