Имею xml файл, который содержит теги Вот исходнй xml:
<MOTree>
<MO className="BTS">
<p name='BSC_NUM'>xxyy</p>
<p name="frequencyBandInUse">1</p>
<p name="gprsMsTxPwrMaxCCH1x00">0</p>
<p name="minMsTxPower">15</p>
<p name="msTxPwrMaxCCH1x00">0</p>
<p name="msTxPwrMaxGSM1x00">0</p>
<p name="insiteGateway">0</p>
<p name="name">xxx_yyy_zzz</p>
<p name="adaptiveLaAlgorithm">0</p>
<p name="adminState">3</p>
</MO>
<MO className="BTS">
<p name="maioOffset">0</p>
<p name="maioStep">1</p>
<p name="masterBcf">1</p>
<p name="maxGPRSCapacity">100</p>
<p name="maxNumberOfRepetition">15</p>
<p name="maxNumberRetransmission">2</p>
<p name="maxQueueLength">50</p>
<p name="maxTimeLimitDirectedRetry">7</p>
</MO>
</MOTree>
Необходимо получить общий список имен тегов
с аттрибутом name.
Давайте вместо устаревшего XmlDocument
используем Linq2Xml.
Это делается, по сути, одной строкой методом Union.
var xml1 = XElement.Load("test1.txt");
var xml2 = XElement.Load("test2.txt");
var union = xml1.Elements("p").Union(xml2.Elements("p"), new XElementComparer())
//.OrderBy(elem => elem.Attribute("name").Value)
;
var xml = new XElement("MO", union);
Раскомментировать строку, если нужен отсортированный порядок.
Дополнительно нам нужен класс, реализующий IEqualityComparer.
class XElementComparer : IEqualityComparer<XElement>
{
public bool Equals(XElement x, XElement y)
{
return x.Attribute("name").Value == y.Attribute("name").Value;
}
public int GetHashCode(XElement obj)
{
return (int)obj.Attribute("name");
//return obj.Attribute("name").Value.GetHashCode();
}
}
Если в атрибуте name
могут быть не целочисленные значения, то использовать закомментированную строку.
Вот что у меня получилось на первом этапе.
static void Main(string[] args)
{
var xml1 = XElement.Load("test1_1.txt");
var xml2 = XElement.Load("test2_1.txt");
var union = xml1.Descendants("p").Union(xml2.Descendants("p"), new XElementComparer());
var xml = new XElement("MO", union);
Console.WriteLine(xml);
Console.ReadLine();
}
Теперь необходимо выполнить все тоже самое, но только в пределах одного xml файла.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как сделать регистрацию в стандарстном проекте исключительно по email? Там нужно вводить username которое потом попадает в поле таблицы AspNetUsers...
скажите пожалуйста как могу сделать чтобы фото увеличился по 50px каждый раз увеличился по 50px а до 500px на оборот уменьшился по50px