Извлечение метаданных из XML-файлов

#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.