LINQ to XML содержимое дочерних записей - PullRequest
1 голос
/ 22 апреля 2010

У меня есть этот запрос LINQ to XML ...

var Records = from Item in XDoc.Root.Elements("Item")
              where (string)Item.Element("ItemNumber") == item.ID.ToString
              select Item;

... где ItemNumber - это ссылочный номер, используемый в XML (первоначально написанный этой программой, но отредактированный вручную другими пользователями), и item.ID является версией базы данных того же самого.Запрос выполняется, и я могу проверить количество записей в результате отлично ...

if (Records.Count() < 1)

... Вы поняли идею.Я установил, что существует только одна запись (редактор не удалил или не дублировал / не умножил элемент).

Каждый элемент имеет несколько дочерних полей.Я хочу проверить значения дочерних полей, прежде чем передавать их в подсистему обновления базы данных.XML создается программой, но редактируется пользователями, поэтому мне нужно действительно проверить, что возвращается.Поэтому я попытался ...

if (DB_English.ToString() != Records.Elements("English").ToString())

... DB_English из базы данных, но XML в записях не содержит содержимого этого поля, он содержит ...

System.Xml.Linq.Extensions+<GetElements>d__29`1[System.Xml.Linq.XElement]

... итак, как мне получить значение этого элемента в файле XML?Мне нужно проверить, что поле в XML не было изменено (ручные редакторы этого файла данных не являются надежными на 100%).

Ответы [ 3 ]

0 голосов
/ 23 апреля 2010
Records.Elements("English").Value

Это даст вам значение XElement.Но он будет только возвращать текст.Если в значении есть html / xml, это не сработает, и вам нужно написать метод расширения, чтобы получить это значение.

В этом случае эта ссылка должна помочь: http://blogs.msdn.com/ericwhite/archive/2008/12/22/convert-xelement-to-xmlnode-and-convert-xmlnode-to-xelement.aspx

0 голосов
/ 28 апреля 2010

Я добавил это ...

XElement X_EnglishE = null;  // This is BLOODY CRAZY
foreach (XElement i in Records)
    {
        X_EnglishE = i.Element("English");  // There is only one damned record!
    }
string X_English = X_EnglishE.Value.ToString();

... и проверить полученную строку X_English. Это работает, но кажется смешным! Должен быть лучший путь.

0 голосов
/ 22 апреля 2010

попробуйте

 if (DB_English.ToString() != Records.Elements("English").InnerXML.ToString())

Доброжелательность,

Dan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...