使用 XPath 获取 XML 文档的数据

XPath 简介

XPath 是使用路径表达式快速在 XML 导航的 W3C 标准

节点类型

XPath 中有七种类型的节点: 元素、属性、文本、命名空间、处理指令、注释以及文档(跟)节点。

对于下面的 HTML

 1 <html lang="zh_CN">                     (1) (2)
 2   <head>                                (3)
 3     <title>Hello XPath</title>          (4)
 4   </head>
 5 
 6   <body>
 7     <!-- comments -->                   (5)
 8     <p>XPath</p>                        (4)
 9   </body>
10 </html>
  1. html 是文档(跟)节点

  2. lang 是属性节点

  3. headbody 是元素节点

  4. Hello XPathXPath 是文本节点

  5. <!-- comments -→ 注释节点

Gentoo 如何选择合适的 USE 选项

对于初次使用 Gentoo 的用户来说,除了内核编译外,最大的疑惑莫过于 USE 变量的作用了,虽然说看见官方的文档说 USE 是用来控制编译选项的,但是却依然不容易理解 USE 到底是怎样工作的。

首先来了解一下 USE 变量的值是如何在 Ebuild 和用户之间交互的。

Ebuild 与用户的交互

Ebuild 提供 USE 选项

一个 ebuild 文件通过设置 IUSE 变量的值来决定这个包提供哪些 USE 可供自定义。比如 dev-vcs/git

1 # 还有很多,这里只节选部分
2 IUSE="+curl cgi emacs +gpg gtk highlight +pcre +perl +python +threads"

表示 dev-vcs/git 提供了如上面这些 USE,前面有 + 表示默认是选中的,没有 + 表示默认不选中。

快速重装 Gentoo

平时用 Gentoo 时有个习惯,Portage 添加了 FEATURES="buildpkg"

这个功能是在安装包的时候,顺便把编译好的二进制包存到 /usr/portage/packages 下,以作重装使用。

所以重装时,就可以用这些二进制包来重装,以避免重复编译浪费时间。

备份 portage 配置文件

包括 /etc/portage/ 目录,/var/lib/portage/{world, world_sets} 等文件,可以用 git 同步到 Github 或者 Bitbucket。

制作二进制包

因为 /usr/portage/packages 下可能存在一个软件的多个版本,而我们只需要最新版本,所以可以使用 eclean packages 清除旧版本的包,只保留最新版本。

而之前没有注意备份二进制包的话,可以使用 quickpkg 创建二进制包。

1 sudo quickpkg --include-config y `equery -qC l *' -F'$cp'`
  • --include-config y 表示连同软件的配置文件一同打包,因此安装了之后无需再次配置。

  • equery -qC l *' -F'$cp' 用来列出当前系统中所有已安装的包。

关于 Gentoo 的 sets, world, word_sets

sets

sets 表示一个拥有若干软件包的集合,相当于软件组。系统预定义了一些 sets,可使用 --list-sets 查看所有 sets (包括自定义)

1 $ emerge --list-sets
2 devel
3 downgrade
4 installed
5 selected
6 system
7 world
8 ...

可以自己定义 sets

将其定义在 /etc/portage/sets 下就行了,比如定义一个 mediasets

1 $ cat /etc/portage/sets/media
2 app-i18n/fcitx
3 app-i18n/fcitx-configtool
4 app-i18n/fcitx-sunpinyin
5 app-misc/screenfetch
6 media-gfx/gimp
7 media-gfx/scrot
8 ...

Gentoo 下 wpa_supplicant 显示ioctl: Invalid argument

电脑拿回来了,新编了个内核。开机没有自动联网。手动启动显示如下。

* Starting WPA Supplicant Daemon ...
ioctl[SIOCSIWPMKSA]: Invalid argument
ioctl[SIOCSIWMODE]: Invalid argument
ioctl[SIOCGIWRANGE]: Invalid argument
ioctl[SIOCGIWMODE]: Invalid argument
ioctl[SIOCSIWAP]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument

后来发现是内核选项的问题。选中 Networking support > Wireless > cfg80211 > cfg80211 wireless extensions compatibility 就行了,默认是没有选中的。