在回答了我的问题的用户的建议后,我想将我的XmlDocument代码转换为XmlReader代码,但我遇到了一些麻烦。
这是XML(从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
这是我的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)
?????
答案 0 :(得分:71)
您可以使用
XmlReader xmlReader = new XmlNodeReader(xmlDoc);
请参阅:http://blog.jongallant.com/2007/01/convert-xmldocument-to-xmlreader.html
答案 1 :(得分:7)
如果您正在对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;
}
}
如上所示,然后可以将数据的读取封装到关联的对象模型中。你可以在这个问题的答案中看到一些细节:
How do I manipulate an XML document one parent element at a time?