Есть xml файл
<toplevel>
<CompleteSuggestion>
<suggestion data="keyshot"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="keystone"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="keystore explorer"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="keyshape"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="keysight technologies"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="keys eset smart security"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="keyshia cole"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="keystone species"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="keys"/>
</CompleteSuggestion>
<CompleteSuggestion>
<suggestion data="keysmart"/>
</CompleteSuggestion>
</toplevel>
3 часа я пытался спарсить данные из data=" " Вроде все казалось легко, но что то не пошло, смотрел ответы на вопросы по теме, и так и не понял как это сделать. В итоге плюнул и сделал вот так
string s = Doc.OuterXml;
string reg = "(?<=data=\").*?(?=\")";
Regex regex = new Regex(reg);
MatchCollection matches = regex.Matches(s);
if (matches.Count > 0)
{
foreach (Match match in matches)
Console.WriteLine(match.Value);
}
else
{
Console.WriteLine("Совпадений не найдено");
}
Как я понял xml документ можно обрабатывать через LINQ и через System.Xml, оба способа мне показались очень сложными. Если вас не затруднит напишите пожалуйста как это сделать правильно а не через регулярные выражения. И почему не стоит использовать regex для таких вещей? Ведь вроде удобно и легко.
Как говорится LINQ to XML вам в помощь...
Вам понадобиться:
XDocument и его 3 метода:
.Element() - Берем один объект..Elements() - Берем коллекцию объектов..Attribute() - Получаем атрибут данной "ноды".В итоге получаем код:
var compleated = XDocument.Load("testFile.txt").Element("toplevel").Elements("CompleteSuggestion");
foreach (var item in compleated)
{
Console.WriteLine(item.Element("suggestion").Attribute("data").Value);
}
XDocument.Load("testFile.txt") - загрузили некий документ..Element("toplevel") - взяли <toplevel> из этого документа..Elements("CompleteSuggestion") - из предыдущего узла взяли все <CompleteSuggestion>.foreach (var item in compleated) - циклом проходимся по полученным объектам.
item.Element("suggestion") - у каждого объекта, который дает нам цикл мы берем <suggestion/>..Attribute("data") - получаем атрибут data у найденного объекта..Value - ну и забираем его значение.Результат:
keyshot
keystone
keystore explorer
keyshape
keysight technologies
keys eset smart security
keyshia cole
keystone species
keys
keysmart
Если надо получить только значение атрибутов, а на остальное грубо говоря пофиг, то подключаем LINQ и переписываем на нечто такое:
var result = XDocument.Load("testFile.txt")
.Element("toplevel")
.Elements("CompleteSuggestion")
.Select(x=>x.Element("suggestion")
.Attribute("data").Value);
Результатом будет коллекция из string значений.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости