Есть 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
значений.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Похожий вопрос уже был но там немного другой код, а я немного разобрался в своем коде и боюсь его сломать
Данный код, в случае его выполнения, должен прописывать в определённую ячейку текст "Выявлены ошибки"При пошаговом выполнении вижу, что программа...
Не работает отладка в Local IIS, пробовал на 3 ПК безрезультатно везде тажа ситуацияПроект на ASP