【C# XML】XPath-Xml Path
XPath
XPath 的意思是 XML 路径语言。它使用的一个非 XML 语法提供一种灵活地定位 XML (en-US) 文档的不同部分的方法。它同时也可以用于检测文档中某个节点是否与某个模式(pattern)匹配。
XPath 主要被用于 XSLT,也可用于定位文档元素,像类 XML 语言文档(如HTML 和 XUL ) 通过 DOM (en-US) 定位元素一样。替代 document.getElementById 方法、 内存中 XML 数据处理
使用 XML 架构
xml常用的元素定位方式:css选择器、 xpath
Xpath工具:火狐插件【try XPath】
路径定位方式
绝对路径:/setp/setp
相对路径:setp/setp
案例:/root/parent/my/child/son
step:轴名称::节点测试[谓语]
轴(axis相当于家族):定义所选节点与当前节点之间的树关系
节点测试(node-test):识别某个轴内部的节点
零个或者更多谓语(predicate):更深入地提炼所选的节点集
/:表示根目录 例如 # res=html.xpath('/html/body/*') # 找html下body下的所有标签(只找子,不找孙)
//:当前位置 例如# res=html.xpath('/html/body//*') # 找html下body下的所有标签(子子孙孙)
XPath 轴(axis)定位方式(类比族谱)
| Xpath轴关键字 | 轴的定义说明 | 定位表达式实例 | 表达式解释 |
| parent | 父母 | //img[@alt='div2-img2']/parent::div | 查找到alt属性为div2-img2的img元素,并基于图片找到其上一级的div元素 |
| child | 子代 | //div[@id='div1']/child::img | 查找id为div1的div标签,基于当前div查找标签为img的子节点 |
| ancestor | 祖代,父亲和父亲的父亲,以此类推 | //img[@alt='div2-img2']/ancestor::div | 查找alt属性为div2-img2的图片,基于当前图片找到其上级的div页面元素 |
| descendant | 后代,儿子和他们孩子以此类推 | //div[@id='div2']/descendant::img | 查找id属性为div2的div元素,在查找其下级所有节点中的img元素 |
| following | 弟弟妹妹和他们的孩子 | //div[@id='div1']/following::img | 查找到ID属性为div1的div元素,并基于div的位置找到它后面节点中的img元素 |
| following-sibling | 弟弟妹妹 | //img[@alt='div1-img1']/following-sibling::input | 查找到alt属性为div1-img1的img页面元素,并基于img的位置找到后续节点中的input元素 |
| preceding | 哥哥姐姐和他们的孩子 | //img[@alt='div2-img2']/preceding::div | 查找到alt属性为div2-img2的图片页面元素,并基于图片的位置找到它前面节点中的div元素 |
| preceding-sibling | 哥哥姐姐 | //img[@alt='div2-img2']/preceding-sibling::a[1] | 查找到alt属性值为div2-img2的图片元素,基于图片位置找到它前面同级节点的第二个链接页面元素 |