#c# #.net #xml #metadata
#c# #.net #xml #метаданные
Вопрос:
Мне нужно извлечь метаданные из нескольких XML-файлов. Структура XML-файла следующая:
<songs>
<song_title> some title </song_title>
<classification> some classification </classification>
<song_text> some text </song_text>
<singer>
<sing> singer's name </sing>
<gender> gender </gender>
<bornYear> year </bornYear>
<livePlace> live place </livePlace>
<liveArea> live area </liveArea>
</singer>
</songs>
Пользователь выбирает критерии поиска — «живое место» или «живая область». Затем он вводит название места или области, которые он ищет. Мне нужно найти и отобразить ссылки на песни, в метаданных которых указано место или область, введенная пользователем. Я использую .NET 3.5
Ответ №1:
Этот ответ является скорее указателем…
Вы можете использовать LINQ to XML для выполнения этой задачи.
Что такое LINQ для XML?
LINQ to XML — это XML-интерфейс программирования в памяти с поддержкой LINQ, который позволяет работать с XML из языков программирования .NET Framework.
LINQ to XML подобен объектной модели документа (DOM) в том, что он переносит XML-документ в память. Вы можете запрашивать и изменять документ, а после его изменения вы можете сохранить его в файл или сериализовать и отправить через Интернет. Однако LINQ to XML отличается от DOM: он предоставляет новую объектную модель, которая имеет меньший вес и с которой проще работать, и которая использует преимущества языковых улучшений в Visual C # 2008.
Затем вы можете выполнять поиск в любом элементе XML-документа и манипулировать им, используя выражения запроса LINQ, подобные следующему примеру:
IEnumerable<XElement> partNos =
from item in purchaseOrder.Descendants("Item")
where (int) item.Element("Quantity") *
(decimal) item.Element("USPrice") > 100
orderby (string)item.Element("PartNumber")
select item;
Ответ №2:
Вы можете использовать XPathing, чтобы легко получить все, что хотите, если у вас есть отвращение к Linq
http://msdn.microsoft.com/en-us/library/ms256086(VS.85).aspx
node.SelectNodes("Songs[/Singer/LivePlace='California']")
это позволило бы получить все узлы Songs, у которых есть узел singer с узлом liveplace со значением California.