Answer1
C# code
XmlDocument doc = new XmlDocument(); doc.Load("xxx.xml"); XmlNodeList nodeList; XmlNode root = doc.DocumentElement; nodeList=root.SelectNodes("//Re/Content"); //Change the price on the books. foreach (XmlNode content in nodeList) { ... }
(example)
XmlDocument doc=new XmlDocument();
doc.Load("... .xml");
XmlNodeList list=doc.GetElementsByTagName("Shot");
foreach(XmlNode node in list)
{
// do something...
}
Answer2
XmlReader 可实现不了你的要求。。。
XmlReader是只前进不后退且不能"跳跃"的,直到所有的节点被读完。
对于处理数据量巨大的Xml用XmlReader比较节省内存。
但对于你的要求,建议使用XPath即1楼的XmlDocument + SelectNodes
或者使用Linq2Xml
Answer3
非要用XmlReader的话可以这样:
-
C# code
-
while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "你想处理的节点名") { ... break; } }
-
Answer4
reader 和 dom 是两套 xml 访问体系
using (XmlReader reader = XmlReader.Create(xmlFilePath))
{
while (tr.Read()){
if (tr.NodeType == XmlNodeType.Element){
for (int i = 0; i < tr.AttributeCount; i++){
richTextBox1.AppendText(tr.GetAttribute(i)+"\r\n");
}
}
}
XmlDocument doc = new XmlDocument();
doc.LoadXml("");
XmlNode temp = doc.SelectSingleNode("NewDataSet/Table/Name[@ID='J1']");
string s = temp.InnerText;
或LINQ TO XML获取值