您的位置:首页 > 编程语言 > C#

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

2012-08-15 11:49 483 查看
转载自: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);

}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: