查看源码 xmerl_xpath (xmerl v2.1)
XPath 1.0 搜索实现。
xmerl_xpath
模块处理整个 XPath 1.0 规范。XPath 表达式通常出现在 XML 属性中,用于寻址 XML 文档的各个部分。语法定义在 xmerl_xpath_parse.yrl
中。核心函数定义在 xmerl_xpath_pred.erl
中。
一些用于调试 XPath 解析器的有用 shell 命令
c(xmerl_xpath_scan).
yecc:yecc("xmerl_xpath_parse.yrl", "xmerl_xpath_parse", true, []).
c(xmerl_xpath_parse).
xmerl_xpath_parse:parse(xmerl_xpath_scan:tokens("position() > -1")).
xmerl_xpath_parse:parse(xmerl_xpath_scan:tokens("5 * 6 div 2")).
xmerl_xpath_parse:parse(xmerl_xpath_scan:tokens("5 + 6 mod 2")).
xmerl_xpath_parse:parse(xmerl_xpath_scan:tokens("5 * 6")).
xmerl_xpath_parse:parse(xmerl_xpath_scan:tokens("-----6")).
xmerl_xpath_parse:parse(xmerl_xpath_scan:tokens("parent::node()")).
xmerl_xpath_parse:parse(xmerl_xpath_scan:tokens("descendant-or-self::node()")).
xmerl_xpath_parse:parse(xmerl_xpath_scan:tokens("parent::processing-instruction('foo')")).
概要
类型
-type nodeEntity() :: xmerl:xmlElement() | xmerl:xmlAttribute() | xmerl:xmlText() | xmerl:xmlPI() | xmerl:xmlComment() | xmerl:xmlNsNode() | xmerl:xmlDocument().
用于自定义 XPath 扫描器行为的选项。
可能的选项是
{namespace, #xmlNamespace}
- 在 xmlContext 中设置来自 XmlNamspace 的命名空间节点
{namespace, Nodes}
- 在 xmlContext 中设置命名空间节点。
-type xPathString() :: string().
函数
-spec string(String, Doc) -> _ when String :: xPathString(), Doc :: nodeEntity().
-spec string(String, Doc, Options) -> _ when String :: xPathString(), Doc :: nodeEntity(), Options :: option_list().
-spec string(String, Node, Parents, Doc, Options) -> [nodeEntity()] | Scalar when String :: xPathString(), Node :: nodeEntity(), Parents :: parentList(), Doc :: nodeEntity(), Options :: option_list(), Scalar :: #xmlObj{type :: term(), value :: term()}.
从解析的 XML 树中提取节点。
根据 XPath String
从解析的 XML 树中提取节点。
Scalar
是一个 #xmlObj{}
记录,具有字段 type
和 value
,其中 #xmlObj.type
是 boolean | number | string
。