Что нужно для Linq to XML, чтобы связать XML с Silverlight Datagrid - PullRequest
1 голос
/ 28 октября 2010

Я смотрел на этот вопрос, и он дал мне около 80% того, что мне было нужно. «Проблема» для меня в том, что мой XML структурирован по-другому, и я не совсем уверен, как бы я использовал Linq, чтобы получить то, что мне нужно.

Мой XML выглядит следующим образом (кстати, он генерируется командлетом ConvertTo-XMl PowerShell)

<?xml version="1.0"?>
<Objects>
  <Object>
    <Property Name="Name">CompiledCode.ps1</Property>
    <Property Name="LastWriteTime">5/21/2009 6:59:16 PM</Property>
  </Object>
  <Object>
    <Property Name="Name">ComputerDrawing.ps1</Property>
    <Property Name="LastWriteTime">1/13/2010 7:52:44 AM</Property>
  </Object>
</Objects>

Я пытаюсь привязаться к сетке данных Silverlight, чтобы имена столбцов были «Имя» и «LastWriteTime», а строки имели значение, указанное в теге свойства. В первом случае имя будет скомпилировано Code.ps1, а LastWriteTime будет «21.05.2009 18:59:16»

Ответ на вышеупомянутый вопрос получил этот метод

private Status GetStatus(XElement el)
        {
            Status s = new Status();
            s.Description = el.Attribute("Description").Value;
            s.Date = DateTime.Parse(el.Attribute("Date").Value);
            return s;
        }

Я создал свой собственный класс под названием Scripts, в котором есть Имя и Дата, но я пытаюсь выяснить, какие элементы или атрибуты мне нужны для заполнения моей таблицы данных.

1 Ответ

1 голос
/ 29 октября 2010

Это основная суть того, что вам нужно: -

private Scripts GetScripts(XElement el)
{
    Scripts s = new Scripts()

    s.Name = (string)el.Elements("Property")
        .Where(e => (string)e.Attribute("Name") == "Name")
        .FirstOrDefault();

    string lastWriteTime = (string)el.Elements("Property")
        .Where(e => (string)e.Attribute("Name") == "LastWriteTime")
        .FirstOrDefault();

    s.LastWriteTime = DateTime.ParseExact(lastWriteTime, "M/d/yyyy h:m:s tt", CultureInfo.InvariantCulture);
 }

Возможно, вы захотите, чтобы LastWriteTime было DateTime, поэтому вы можете поместить его в промежуточную строку и использовать точный синтаксический анализ.

...