XML linq、XelementC#で重複したノードの削除
質問
xml.linqを使用してXML構成ファイルを管理します。
Xelement(company.calidadcodigo.parsersql.reglas)があり、Xelementで重複した値を削除する必要があります(nodes add-key-value、繰り返される)。
私はユニオンを使用していますが、正しくありません。
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>
解決
次のように、それらを個別の値にグループ化してみてください。
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
他のヒント
以下は、個別の行を提供します。
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();
所属していません StackOverflow