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

C# XML解析方式实例解析 (带命名空间的)

2012-12-10 16:39 549 查看
http://www.csharpwin.com/csharpspace/3968r4687.shtml

C# XML解析通过XPath的方式的步骤:

1、需要先加载文档,然后再读取想要的节点值。

◆xml文档

protected XmlDocument doc = null;

◆xml文档的根元素(节点)

protected XmlElement root = null;

◆xml文档的名空间管理器

protected XmlNamespaceManager nsmgr = null;

2、接下来就是加载文档了

protected void LoadXmlFile(FileInfo xmlFile)

{

if (xmlFile == null || !xmlFile.Exists)

{

throw new FileNotFoundException(

string.Format("要解析的文件不存在{0}。",

xmlFile.FullName));

}

//加载文件

this.doc = new XmlDocument();

doc.Load(xmlFile.FullName);

//准备读取文件

root = doc.DocumentElement;

string nameSpace = root.NamespaceURI;

nsmgr = new XmlNamespaceManager(doc.NameTable);

nsmgr.AddNamespace("ns", nameSpace);

}

◆C# XML解析通过XPath的方式要注意。

a、这两行是取得xml文档的名空间

root = doc.DocumentElement;

string nameSpace = root.NamespaceURI;

b、这两行是建立xml文档的名空间管理器

nsmgr = new XmlNamespaceManager(doc.NameTable);

nsmgr.AddNamespace("ns", nameSpace);

如果你的xml文档有名空间,则这部分的代码是必不可少的。

3、接下来就是读取文档节点的值了

这里两个传入参数prefixPath是节点的上级节点路径,xRelativePath是要读取的节点名称。

另外,变量XmlFileInfo是要加载的xml文件。

protected string GetNodeValue(

string prefixPath, string xRelativePath)

{

if (doc == null)

{

LoadXmlFile(XmlFileInfo);

}

string xPath = string.Empty;

if (!string.IsNullOrEmpty(xRelativePath))

{

if (!string.IsNullOrEmpty(prefixPath))

{

xPath = prefixPath + xRelativePath;

}

else

{

xPath = xRelativePath;

}

}

xPath = xPath.Replace("/", "/ns:");

XmlNode node = root.SelectSingleNode(xPath, nsmgr);

if (node == null)

{

return null;

}

return node.InnerXml;

}

可能有的朋友要问,为什么要设置两个参数prefixPath和xRelativePath呢,其实这个没有多大的关系,我只是为了自己觉得方便,你也可以在方法外确定了这个XPath,在方法中只设置一个传入参数,效果是一样的。

◆注意这一行:

xPath = xPath.Replace("/", "/ns:");

如果你的xml文档带名空间,则这行是比不可少的,否则会出现找不到节点,无法解析的情况。

关于XPath的一些问题:

对于这样一个xml文档,要查找第一个节点下的学生的Name时(ID=01),其XPath应该是"/ns:Root/ns:Students/ns:Student[1]/ns:Name"。xml对于重复的节点名称,是按照顺序1,2,3...的方式遍历的,也就是说如果要找第N个Student节点的下的节点之,那么应使用Student
的标识方式。

﹤?xml version="1.0" encoding="UTF-8" ?﹥

﹤Root xmlns="urn:ClassNameSpace"﹥

﹤Class﹥

﹤ClassID﹥1234﹤/ClassID﹥

﹤/Class﹥

﹤Students﹥

﹤Student﹥

﹤ID﹥01﹤/ID﹥﹤Name﹥Name01﹤/Name﹥

﹤/Student﹥

﹤Student﹥

﹤ID﹥02﹤/ID﹥﹤Name﹥Name02﹤/Name﹥

﹤/Student﹥

﹤/Students﹥

﹤/Root﹥

当然,这里也可以获取节点属性的值,查找满足特定值的节点等等,这些和上面获取节点值的过程是类似的。

C# XML解析通过XPath的方式的实现就向你介绍到这里,希望对你了解和学习C# XML解析有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: