Из XmlDocument в XmlReader .Net - PullRequest
       32

Из XmlDocument в XmlReader .Net

17 голосов
/ 27 января 2012

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

Это XML (сгенерированный из php-mysql Page)

<row>
<idLink>64</idLink>
<idHost>3</idHost>
<url>http://www.google.com</url>
</row>
<row>
<idLink>68</idLink>
<idHost>4</idHost>
<url>http://www.bing.com</url>
</row>
..... until about 10000 rows

Это мой код XmlDocument:

   xmlDoc.Load("http://www.myUrl.com/list.php");
      if (xmlDoc.DocumentElement != null){
          foreach (XmlNode node in xmlDoc.DocumentElement)
             {
              if (node.Name == "row")
                {
                  list.Add(new Links { 
                       idLink = Convert.ToInt32(node.ChildNodes[0].InnerText),
                       idHost = Convert.ToInt32(node.ChildNodes[1].InnerText),
                       url = node.ChildNodes[2].InnerText }); 
                  }
             }  
             return list;

Теперь у меня возникли проблемы с преобразованием в XmlReader, я пробовал много кода, но не могу его обработать.

using (XmlReader reader = new XmlTextReader("http://myUrl.com/list.php"))
         { 
          if (reader.NodeType == XmlNodeType.Element) 
           ?????

Ответы [ 2 ]

72 голосов
/ 05 октября 2012

Вы можете использовать

XmlReader xmlReader = new XmlNodeReader(xmlDoc);

См .: http://blog.jongallant.com/2007/01/convert-xmldocument-to-xmlreader.html

7 голосов
/ 27 января 2012

Если вы выполняете операции только для чтения с XML-файлом, вы можете использовать XmlReader, но, как указывает @Marc Gravell, это сложно.

В этой ситуации я создам класс, который переноситXPathDocument с использованием XmlReader.Затем я создаю XPathNavigator для чтения данных.Вот пример:

public class MyXmlReader
{
    public MyXmlReader(string xml)
    {
        StringReader sReader = new StringReader(xml);

        XPathDocument xml = new XPathDocument(XmlReader.Create(sReader));

        xmlNav = xml.CreateNavigator();
    }

    private XPathNavigator xmlNav = null;


    public MyDataModel ReadMyDataModel()
    {
        MyDataModel model = new MyDataModel();

        model.Read(xmlNav);

        return model;
    }
}

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

Как мне манипулировать документом XML по одному родительскому элементу за раз?

...