利用xpath提取xml文档数据
之所以要引入xpath的概念,目的就是为了在匹配xml文档结构树时能够准确地找到某一个节点元素。可以把xpath比作文件管理路径:通过文件管理路径,可以按照一定的规则查找所需要的文件;同样,依据xpath所制定的规则,也可以很方便地找到xml结构文档树种的任何一个节点。 XPath可分为四种数据类型:1、节点集(node-set) 其中后三种数据类型与其它编程语言中相应的数据类型差不多,只是第一种数据类型是XML文档树的特有产物。 下面,我们来构造一棵XML文档树,作为后面举例的依托:<A id="a1">
<B id="b1">
<C id="c1">
<B name="b"/>
<D id="d1"/>
<E id="e1"/>
<E id="e2"/>
</C>
</B>
<B id="b2"/>
<C id="c2">
<B/>
<D id="d2"/>
<F/>
</C>
<E/>
</A>
现在,我们来介绍一些XPath中节点配置的基本方法。
2、位置匹配
3、条件匹配 //函数及功能作用
count()功能
//统计计数,返回符合条件的节点的个数
number()功能
//将属性的值中的文本转换为数值
substring() 功能
//语法:substring(value,start,length)
//截取字符串
sum()功能
//求和
这些功能只是XPath语法中的一部分,还有大量的功能函数没有介绍,而且目前XPath的语法仍然在不断发展中。通过这些函数我们可以实现更加复杂的查询和操作。 以上这些匹配方法中,用得最多的还要数路径匹配。依靠给出相对于当前路径的子路径来定位节点的。 用SelectSingleNode()和SelectNodes()搜索结点
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();//建立文档对象
try
{
doc.Load("http://www.cnblogs.com/myOrder.xml");
XmlNode root = doc.DocumentElement;//获取文档的根节点
XmlNode temp;
temp = root.SelectSingleNode("姓名");
Console.WriteLine("(查找1)" + temp);
temp = root.SelectSingleNode("定购人信息/姓名");
Console.WriteLine("(查找2)" + temp.Name+":"+temp.InnerText);
temp = root.SelectSingleNode("订货信息/商品/品名");
Console.WriteLine("(查找3)" + temp.Name + ":" + temp.InnerText);
XmlNodeList templist = root.SelectNodes("订货信息/商品/品名");
Console.WriteLine("(查找4)");
foreach (XmlNode nodeinlist in templist)
{
Console.WriteLine(nodeinlist.Name + ":" + nodeinlist.InnerText);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();//辅助代码,用于保留控制台窗口
}
}
}
在xml搜索节点(两种方法)
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();//建立文档对象
try
{
doc.Load("http://www.cnblogs.com/myOrder.xml");
//在xmlDocument对象中搜索元素
Console.WriteLine("");
XmlNodeList myNodeList = doc.GetElementsByTagName("品名");
for (int i = 0; i < myNodeList;i++ )
{
Console.WriteLine(myNodeList[i].Name+":"+myNodeList[i].InnerText);
}
//在xmlElement对象中搜索元素
Console.WriteLine("在xmlElement对象中搜索元素");
XmlElement myElement = doc.DocumentElement;
myElement = (XmlElement)myElement.LastChild;
myNodeList = myElement.GetElementsByTagName("品名");
for (int i = 0; i < myNodeList; i++)
{
Console.WriteLine(myNodeList[i].Name + ":" + myNodeList[i].InnerText);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();//辅助代码,用于保留控制台窗口
}
}
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |