Как я могу разделить значение атрибута в LINQ (-to-XML)?

Мне захотелось заняться чем-нибудь интересным с моими восхитительными закладками и LINQ to XML, и мне было интересно, есть ли способ разделить атрибут тега внутри LINQ.

Под разделением тега в LINQ я имел в виду создание набора строк для каждого элемента сообщения, поэтому ожидаемым результатом будет общий набор элементов post с его атрибутами в качестве свойств, где Свойство tag само по себе является еще одним набором строк, элементы которого являются каждым тегом.

Для тех, кто не совсем знаком с XML, экспортируемым с delicious.com, вот основная структура элемента:

<post
    href="http://stackoverflow.com/"
    hash="e4a42d992025b928a586b8bdc36ad38d"
    description="Stack Overflow"
    tag="code development programming community tips answers reference"
    time="2009-05-22T19:44:09Z"
    extended="Stack Overflow is a programming Q & A site that's free."
    meta="e0bf85c9df073cd51cc5528637db5277"
 />

Вот фрагмент кода, который я использую:

   XDocument delicious = XDocument.Load("all.xml");

  var bookmarks = from posts in delicious.Descendants().Attributes("tag")
                  select (string)posts;

Любые идеи, предложения, комментарии будут действительно оценены.


person Community    schedule 22.05.2009    source источник


Ответы (3)


Каков ваш желаемый результат на самом деле? Вам нужен массив каждого значения в поле «тег»?

var bookmarks = from posts in delicious.Descendants().Attributes("tag")
                    select ((string)posts).Split(" ");

Это даст вам список массивов. Трудно сказать, как выполнить то, что вы хотите, так как это не очень хорошо определено.

person Community    schedule 22.05.2009
comment
Спасибо за ваш ответ, Эндрю, на самом деле я хочу иметь возможность вычислять эти теги, например, если бы они были независимыми, например, сколько тегов разработки я добавил в определенный месяц и так далее. - person Nano Taboada; 23.05.2009
comment
Вы можете получить строку и добавить предложение where с Contains development . Это даст вам сообщения с атрибутами, имеющими развитие как часть своего тега. - person shahkalpeshp; 23.05.2009
comment
Спасибо шахкалпеш! Я думал об этом подходе, который на данный момент, вероятно, является лучшим возможным решением. - person Nano Taboada; 27.05.2009

string имеет метод Split.
Это то, что вы ищете?

РЕДАКТИРОВАТЬ: string.Join(Environment.NewLine, bookmarks.ToArray());

person Community    schedule 22.05.2009
comment
Не совсем, на самом деле мне нужно разделить их внутри LINQ, чтобы я мог предоставить их своим операторам, таким как count() и sum() - person Nano Taboada; 23.05.2009

Что я сделал, так это использовал «set» и присвоил значение этой переменной, а затем использовал set для продолжения манипулирования, поэтому в конце я смог просто использовать его в своем запросе linq, поскольку он был в форме, которая была теперь мне пригодится. :)

person Community    schedule 27.05.2009
comment
Спасибо за ваш вклад, Джеймс! Не могли бы вы уточнить немного больше? - person Nano Taboada; 23.06.2009
comment
Извините, что так долго не отвечаю, но вот что я сделал: var q = from file in Directory.GetFiles(...) let fi = new FileInfo(file) let c = XElement.Load(file) as XElement let livetime = !string.IsNullOrEmpty(c.Element(LiveTime).Value) ? int.Parse(c.Element(LiveTime).Value) : -1 select new { DeadTime = deadtime, используя набор, вы можете выполнять манипуляции с атрибутом. - person James Black; 08.07.2009