.net - from - xmldocument load c#
De XmlDocument a XmlReader.Net (2)
Después de recibir un consejo de un usuario que respondió a mi pregunta, estoy intentando convertir mi código XmlDocument a código XmlReader, pero tengo algunos problemas.
Esto es XML (generado desde la página php-mysql)
<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
Este es mi código 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;
Ahora tengo algunos problemas para convertir en XmlReader, probé muchos códigos pero no puedo manejarlo.
using (XmlReader reader = new XmlTextReader("http://myUrl.com/list.php"))
{
if (reader.NodeType == XmlNodeType.Element)
?????
Puedes usar
XmlReader xmlReader = new XmlNodeReader(xmlDoc);
Consulte: http://blog.jongallant.com/2007/01/convert-xmldocument-to-xmlreader.html
Si está realizando operaciones de solo lectura en un archivo xml, puede usar XmlReader
pero como lo señala @Marc Gravell es difícil.
En esta situación, crearé una clase que envuelva un XPathDocument
con un XmlReader
. Entonces creo un XPathNavigator
para leer los datos. Aquí hay un ejemplo:
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;
}
}
Como se muestra arriba, la lectura de los datos se puede encapsular en un modelo de objeto asociado. Puedes ver algunos detalles en mi respuesta a esta pregunta: