разбор XML в C # - PullRequest
       20

разбор XML в C #

0 голосов
/ 03 ноября 2010

Привет, ребята. Я хотел бы проанализировать следующую строку XML в C #. Я попытался прочитать всю строку в наборе данных, а затем использовать ее ... в наборе данных просто нет таблиц.

вот XML, который мне интересно проанализировать.

xml код здесь http://pastebin.com/VfT2wAwY

C # код здесь http://pastebin.com/iwqDK2S6


Спасибо и всего наилучшего, Гаган Джанджуа

Ответы [ 4 ]

5 голосов
/ 03 ноября 2010

Рассматривали ли вы LINQ to XML ? Если вы используете .NET Framework 3.5 или более позднюю версию, LINQ может сэкономить вам много времени.

Я не проверял это, но вы могли бы сделать что-то вроде:

XDocument doc = XDocument.Load(@"C:\mydocument.xml");

var allCases = doc.Element("response").Element("cases").Descendants("case");

foreach (var currentCase in allCases) {
    // I can now access each case specifically
    var allEvents = currentCase.Descendants("events");

    foreach (var currentEvent in allEvents) {
        // now I can access each event
        int ixBugEvent = (int)currentEvent.Element("ixBugEvent");
        // etc...
    }
}
2 голосов
/ 04 ноября 2010

Ваш код возвращает ноль, потому что ваш улов делает его нулевым. Он попадает в зацепку со следующей ошибкой:

Column name 'ixBugEvent' is defined for different mapping types.

У меня сложилось впечатление, что причина в том, что у вас ixBugEvent как атрибут и элемент

<event ixBugEvent='3' ixBug='2'>
          <ixBugEvent>3</ixBugEvent>

Удаление одного из них устраняет проблему. Код работает, но ваша XML-схема не может быть преобразована в набор данных.

2 голосов
/ 03 ноября 2010

Вам известно о XmlReader из System.Xml?

Нет предоставленной вами схемы в XML, поэтому вы не можете ожидать, что сможете использовать ее для заполнения DataSet ... Если вы не определите свою собственную схему, то есть.

0 голосов
/ 04 ноября 2010

Вы можете изменить код Скотта, чтобы он работал, изменив следующую строку кода:

   // I can now access each case specifically
    var allEvents = currentCase.Descendants("events");

Сделать это:

   // I can now access each case specifically
    var allEvents = currentCase.Descendants("event");

Для этого у вас есть доступ к каждому элементу события. И оттуда вы определенно можете получить доступ к элементу ixBugEvent.

Надеюсь, это поможет.

P.s .: Извините, что сделал еще один ответ, но я хотел бы выделить код, и, кажется, единственный способ сделать это ...

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