C# xml 根据属性值直接得到目标节点

来源:互联网 发布:淘宝蒲公英 编辑:程序博客网 时间:2024/06/07 00:21

转载自:http://hi.baidu.com/guidee/item/a92f3e4b76a4d9afdf2a9f51


C# xml 根据属性值直接得到目标节点

<?xml version="1.0" encoding="utf-8" ?>
<STUDENTS>
<STUDENT NO="1">
    <BASIC>
      <NAME>LOTUS</NAME>
      <AGE>21</AGE>
    </BASIC>
    <DETAIL>
      <ITEM>
        <TEL>123465</TEL>
      </ITEM>
      <ITEM>
        <HOMEPAGE>hi.baidu.com/lotusOxygen</HOMEPAGE>
      </ITEM>
      <ITEM>
        <OTHER>THANKS</OTHER>
      </ITEM>
    </DETAIL>
</STUDENT>
<STUDENT NO="2">
    <BASIC>
      <NAME>FURONG</NAME>
      <AGE>21</AGE>
    </BASIC>
    <DETAIL>
      <ITEM>
        <TEL>654321</TEL>
      </ITEM>
      <ITEM>
        <HOMEPAGE>hi.baidu.com/lotusOxygen</HOMEPAGE>
      </ITEM>
      <ITEM>
        <OTHER>THANKS (*^__^*) </OTHER>
      </ITEM>
    </DETAIL>
</STUDENT>
</STUDENTS>操作方式是根据student-no获取每一个值

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace operatorstudentxml
{
    class Program
    {
        static void Main(string[] args)
        {
            string targetValue = "1";//操作方式是根据student-no获取每一个值 targetValue就是student-no的值,这里手动赋值,可以是“1”和“2”,也可是是任意其它,只不过xml没有匹配的话,结果集为空。

            string filePath = @"F:\student.xml";//xml 文件路径
            XmlDocument doc = new XmlDocument();
            doc.Load(filePath);//加载文件。以上三句雷打不动


            string targetParm = string.Format("STUDENTS/STUDENT[@NO='{0}']", targetValue);//生成目标获取节点的参数
            XmlNode targetNode = doc.SelectSingleNode(targetParm);//获得目标节点
            if (targetNode == null)
                Console.WriteLine("can not find");
            else
                traChildNodes(targetNode);//遍历目标节点下所有子节点的value
        }
        /// <summary>
        /// 遍历目标节点下所有子节点的value
        /// </summary>
        /// <param name="node">目标节点</param>
        public static void traChildNodes(XmlNode node)
        {
            if (node.HasChildNodes)//如果有子节点
            {
                XmlNodeList list = node.ChildNodes;//得到子节点集合
                foreach (XmlNode n in list)//递归遍历每一个子节点
                    traChildNodes(n);
                Console.WriteLine();
            }
            else//没有子节点了,说明该节点已经是叶子节点,输出节点的名字和内容
                Console.WriteLine("{0}: {1}", node.ParentNode.Name, node.InnerText);
        }
    }
}


原创粉丝点击