Значение для корневого элемента XML совершенно неверно, не найдены дочерние узлы - PullRequest
0 голосов
/ 28 декабря 2011

У меня есть очень простой XML-файл, который выглядит следующим образом:

<allData>
  <allDataDetails>
    <quoteid>ABC123</quoteid>
    <customername>John Smith</customername>
  </allDataDetails>
  <allDataDetails>
    <quoteid>DEF456</quoteid>
    <customername>Jane Doe</customername>
  </allDataDetails>
</allData>

Мой XSD указывает, что должен существовать хотя бы 1 элемент allDataDetails. Документ подтвержден в порядке.

Однако при запросах с использованием Linq to XML я не могу распознать или запросить внутренние элементы в allData. Вместо этого, когда я смотрю в отладчике, атрибут Value - это все объединенные данные. Это выглядит так:

ABC123John SmithDEF456Jane Doe

Вот мой код запроса. myRows всегда нулевой, потому что я не могу получить потомков:

XDocument entityXml = XDocument.Parse(myDataString);

var myRows = from d in entityXml.Descendants("allDataDetails")
             select new
             {
                quoteid = d.Element("quoteid").Value,
                customername = d.Element("customername").Value
             };

Кто-нибудь знает, что здесь может быть не так?

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

У меня сложилось впечатление, что вы смотрите на неправильную переменную в вашем окне локальных компьютеров - вы просматриваете весь XDocument, и его свойство .Value действительно будет чем-то вроде конкатенированной строки все значения узлов .....

Но вы действительно должны посмотреть на переменную MyRows - и если вы действительно выполняете опубликованный код, вы должны увидеть это:

enter image description here ( полное изображение здесь )

Разве это не то, что вы ищете / ожидаете ???

1 голос
/ 28 декабря 2011

Я просто запустил ваш пример кода, и было исправлено несколько синтаксических ошибок: а также неверная запятая для имени клиента, попробуйте мою версию ниже, она должна работать.

string myDataString = @"<allData>
                          <allDataDetails>
                            <quoteid>ABC123</quoteid>
                            <customername>John Smith</customername>

                          </allDataDetails>
                          <allDataDetails>
                            <quoteid>DEF456</quoteid>
                            <customername>Jane Doe</customername>

                          </allDataDetails>
                        </allData>";
             XDocument entityXml = XDocument.Parse(myDataString);


             var myRows = from d in entityXml.Descendants("allDataDetails")
                      select new
                        {
                            quoteid = d.Element("quoteid").Value
                            ,customername = d.Element("customername").Value
                        };
             foreach (var rw in myRows)
                 Console.WriteLine(rw.customername + "\t" + rw.quoteid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...