xml SelectSingleNode()方法
string TabFieldName;
DataRow[] rows = null;
rows = dt.Select();
// xmlNode.ParentNode;
foreach (var item in rows)
{
string xmlNodeName = item["XmlField"].ToString();
TabFieldName = item["TableField"].ToString();
// XmlNode q = xmlNode.ParentNode;
XmlNode tempXmlNode = xmlNode.SelectSingleNode("//" + xmlNodeName); if (tempXmlNode != null)
{
tempXmlNode.InnerText = mHeadTable.Rows[j][TabFieldName].ToString();
}
}
为什么SelectSingleNode方法每次都是查找到xml模板里面的第一个节点。xmlNode 中我都指定了查询body部分,但它还是查找到head部分中的节点。把head中的节点给重新赋值了。
有没有高手帮忙解决啊。。。。
[解决办法]
xmlNode是不是没有变化,你在哪指定 xmlNode的指向了
[解决办法]
- C# code
class XMLTester { #region 准备处理XML片段 /// <summary> /// /// </summary> /// <param name="fileFullPath"></param> public void processXML(string fileFullPath) { XmlDocument xmlDoc = new XmlDocument(); //给定了文件的全路径,载入文档 xmlDoc.Load(fileFullPath); //若给定的不是文件,而是XML字符串,可以如下得到Document //xmlDoc.LoadXml(xmlStr); // 此处是处理文档中的 //Resources//UIResource节点,这是一个XML片段 // XmlNode node = xmlDoc.DocumentElement.SelectSingleNode("//Resources//UIResource"); // 也可以处理整篇文档 XmlNode node = xmlDoc.DocumentElement; string rootString = node.Name; processNode(node, rootString); } public void processNode(XmlNode xmlNode,string rootStr) { if (xmlNode.HasChildNodes == true) { processBranchNode(xmlNode); processNode(xmlNode.FirstChild, rootStr); } else { processLeafNode(xmlNode); if (xmlNode.NextSibling != null) { processNode(xmlNode.NextSibling,rootStr); } else { int flag = 0; while (xmlNode.NextSibling == null) { if (xmlNode.Name == rootStr)//检查是否到了根节点,如果不检查会出现节点的引用错误 { flag = 1; break; } else { xmlNode = xmlNode.ParentNode; } } if (flag == 0) { if (xmlNode.Name != rootStr) processNode(xmlNode.NextSibling,rootStr); else Console.Write("process XML End=============================\r\n\r\n"); } else if (flag == 1) { Console.Write("process XML End=============================\r\n\r\n"); } } } } /// <summary> ///处理叶节点,可用 /// </summary> /// <param name="xmlNode"> 一个叶节点</param> private static void processLeafNode(XmlNode xmlNode) { Console.Write(" "+xmlNode.Name); Console.WriteLine(" is a leaf XML Node ,its first Attribute: key:"+xmlNode.Attributes[0].Name +"; Value:"+xmlNode.Attributes[0].Value); Console.Write(xmlNode.InnerText); Console.Write("\n"); } private static void processBranchNode(XmlNode xmlNode) { Console.Write(xmlNode.Name); Console.WriteLine(" has children; children count: " +xmlNode.ChildNodes.Count); Console.Write("\n"); } #endregion public static void Main() { XMLTester t = new XMLTester(); t.processXML(@"D:\test.xml"); Console.Read(); } }