XPath语法在XML数据解析的应用
XML文档示例:
<? XML version = "1.0" encoding = "utf-8" ?>
<bookstore>
<book>
<title>c语言</title>
<author name="xiao">
<age>25</age>
</author>
</book>
<book>
<title>数据库</title>
<price>100</price>
</book>
<book>
<title>数据结构</title>
<age>100</age>
<author name="wang">
<age>25</age>
<sex>female</sex>
</author>
<price>66.5</price>
</book>
</bookstore>
XPath语法在XML数据解析的应用:
private void button_click(object render, EventArgs e){
XmlDocument doc = new XmlDocument();
doc.Load(@"..\..\CD.xml");
XmlElement root = null;
root = doc.DocumentElement;
XmlNodeList listNodes = null;
listNodes = root.SelectNodes("/bookstore/book/price"); // 选取符合XPath层级的price节点
foreach(XmlNode node in listNodes){
richTextBox.Text += node.InnerText + "/n";
}
}
// XPath语法小结:
"//title": 开头两个斜线表示,即使处于树中不同层级也会被筛选出来,选出所有title元素
"/bookstore/book/author/*": 使用星号(*),可以选择未知元素,选择bookstore根节点下的author节点下的所有节点
"/bookstore/book/*/age": 选出所有bookstore根节点下的book节点的隔一个层级的age节点
"/*/*/age": 选取两个层级下的age元素
"/bookstore/book[1]/title": 使用中括号可以选择分支,选择bookstore根节点下第一个book节点的title节点(结果:C语言)
"bookstore/book[last()]/title": 结果:数据结构
"bookstore/book/author[sex]": 选择所有带有sex子节点并满足一定层级结构的author节点
"bookstore/book[price=66.5]/title": 选择price子节点等于66.5的book父节点的title子节点
"/bookstore/book/title | /bookstore/book/price": 选择一个以上路径,选择符合一定层级结构的title元素与price元素
"//@name": 选择属性时以@开头,这表示选择所有name属性
"//author[@name]/age": 表示选择具有name属性的author节点的age节点
"//*[@*]": 选择所有带有属性的节点
"//author[@name='wang']/sex": 选取所有name属性值为wang的author节点的sex子节点