XPath语法

XPath例子:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

1.选取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

下面列出了最有用的路径表达式:

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

实例:

路径表达式结果
bookstore选取 bookstore 元素的所有子节点。
/bookstore

选取根元素 bookstore。

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang选取名为 lang 的所有属性。

2.谓语

谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

扩展:

为了解决 IE5+ 中 [0] 和 [1] 的问题,可以为 XPath 设置语言选择(SelectionLanguage):

xml.setProperty("SelectionLanguage","XPath");

3.选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符描述
*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点。

实例:

路径表达式结果
/bookstore/*选取 bookstore 元素的所有子元素。
//*选取文档中的所有元素。
//title[@*]选取所有带有属性的 title 元素。

4.选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

实例:

路径表达式结果
//book/title | //book/price选取 book 元素的所有 title 和 price 元素。
//title | //price选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/xiaoq6427/blog/682952

### Linux 中用于定位文件所在目录命令Linux 系统中,`find` 命令是一个强大的工具,可以用来搜索特定条件下的文件目录。它可以根据名称、类型、大小、修改时间等多种属性来筛选目标文件目录[^1]。 #### 使用 `find` 查找文件所在的目录 以下是通过 `find` 命令查找指定文件并显示其路径的方法: ```bash find /path/to/search -name "filename" ``` - `/path/to/search`: 表示从哪个根目录开始搜索。如果是整个系统范围内的搜索,可以用 `/` 或者 `$HOME` 来限定用户的家目录。 - `-name "filename"`: 指定要查找的目标文件名。支持通配符匹配,例如 `"*.txt"` 可以找到所有的 `.txt` 文件[^1]。 为了忽略大小写差异,可改用 `-iname` 替代 `-name`: ```bash find /path/to/search -iname "FILENAME" ``` #### 进一步优化搜索结果 如果只想获取文件所在的目录而不关心具体文件本身,可以通过管道传递到 `dirname` 工具处理输出的结果: ```bash find /path/to/search -name "filename" | xargs dirname ``` 或者直接利用正则表达式提取父级路径部分: ```bash find /path/to/search -type f -name "filename" -printf '%h\n' ``` 这里 `%h` 是格式化字符串的一部分,表示打印出命中项所属的上层目录位置[^1]。 #### 防止误入不必要的子树结构 当某些特殊场景下存在不想深入探索的大规模嵌套层次时(比如挂载点),应该考虑加入 `-prune` 参数控制递归行为[^2]: ```bash find /path/to/search \( -path "/path/to/exclude*" -o -path "." \) -prune -o -name "filename" -print ``` 上述例子中的逻辑组合允许排除掉不希望涉及的具体分支之外其他地方继续正常检索操作[^2]。 --- ### 总结 综上所述,在 Linux 下寻找某个已知名字却不知道确切存储地点的情况之下,“find”无疑是最佳解决方案之一;同时配合恰当参数设置还能有效提升效率减少干扰信息量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值