C# XML解析方式实例解析
C# XML解析的实现如何是通过XPath的方式是如何办到的呢?具体的操作步骤是什么呢?那么本文就向你详细介绍通过XPath的方式来实现C# XML解析以及需要注意的一些事宜。
C# XML解析通过XPath的方式是如何办到的呢?具体的操作步骤是什么呢?那么下面我们就向你介绍通过XPath的方式来实现C# XML解析,希望对你了解C# XML解析有所帮助。
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[N]的标识方式。
﹤?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解析有所帮助。