XPath 语法笔记
- XPath 表达式
- 1. 选择所有本地名称为特定名称的元素
- 2. 选择具有特定属性的元素
- 3. 选择属性值不等于特定值的元素
- 4. 选择元素内容中包含特定字符串的节点
- 5. 选择元素内容中不包含特定字符串的节点
- 6. 选择特定命名空间内的元素
- 7. 选择元素的属性
- 8. 选择元素的所有属性
- 9. 选择所有子孙元素
- 10. 选择当前节点的父节点
- 注意事项
- 参考资料
XPath 表达式
1. 选择所有本地名称为特定名称的元素
- 表达式:
//*[local-name()='elementName']
- 示例: 若要选择所有本地名称为
sym
的元素,可以使用.//*[local-name()='sym']
。
2. 选择具有特定属性的元素
- 表达式:
//*[local-name()='elementName' and @attributeName='value']
- 示例: 若要选择所有本地名称为
sym
且w:font
属性值为"Arial"
的元素,可以使用.//*[local-name()='sym' and @w:font='Arial']
。
3. 选择属性值不等于特定值的元素
- 表达式:
//*[local-name()='elementName'][not(@attributeName='value')]
- 示例: 若要选择所有本地名称为
sym
但w:font
属性值不为"Arial"
的元素,可以使用.//*[local-name()='sym'][not(@w:font='Arial')]
。
4. 选择元素内容中包含特定字符串的节点
- 表达式:
//*[contains(text(), 'string')]
- 示例: 若要选择所有内容中包含单词
example
的段落,可以使用//p[contains(text(), 'example')]
。
5. 选择元素内容中不包含特定字符串的节点
- 表达式:
//*[not(contains(text(), 'string'))]
- 示例: 若要选择所有内容中不包含单词
example
的段落,可以使用//p[not(contains(text(), 'example'))]
。
6. 选择特定命名空间内的元素
- 表达式:
//namespace:elementName
- 示例: 若要选择
http://schemas.openxmlformats.org/wordprocessingml/2006/main
命名空间下的所有sym
元素,可以使用//w:sym
,其中w
命名空间必须在XPath引擎中被正确声明。
7. 选择元素的属性
- 表达式:
//*[local-name()='elementName']/@attributeName
- 示例: 若要选择所有
sym
元素的w:char
属性,可以使用.//*[local-name()='sym']/@w:char
。
8. 选择元素的所有属性
- 表达式:
//*[local-name()='elementName']/@*
- 示例: 若要选择所有
sym
元素的所有属性,可以使用.//*[local-name()='sym']/@*
。
9. 选择所有子孙元素
- 表达式:
//elementName
- 示例: 若要选择文档中所有的
p
元素,无论它们处于哪个层级,可以使用//p
。
10. 选择当前节点的父节点
- 表达式:
..
- 示例: 如果当前节点是
<p>...</p>
,那么..
将指向包含它的父节点。
注意事项
- 当使用命名空间时,确保在XPath引擎中正确声明命名空间的前缀和URI。
.
代表当前节点,..
代表当前节点的父节点。@*
选择所有属性。- 使用
local-name()
函数时,XPath会忽略命名空间,只考虑元素的本地名称。
参考资料
XPath 1.0 规范: https://www.w3.org/TR/xpath/
XPath 2.0 规范: https://www.w3.org/TR/xpath-20/
XPath 3.1 规范: https://www.w3.org/TR/xpath-31/
菜鸟教程 XPath 参考手册 - 语法