我试图了解libxml是如何实现XPath支持的,所以使用xmllint进行测试是有意义的。然而,显而易见的选项--模式,有点模糊,最后我使用了如下内容:
test.xml: <foo><bar/><bar/></foo>
> xmllint --shell test.xml
/ > dir /foo
ELEMENT foo
/ > dir /foo/*
ELEMENT bar
ELEMENT bar这似乎很有效,这很好,但我还是很好奇。什么是xmllint的模式选项,以及它是如何工作的?
提供一个完全信用的例子。=)
发布于 2012-05-02 19:24:17
提示出现在“可与解析器的读取器接口一起使用”:xmllint只在传递-stream选项时才使用读取器接口:
$ xmllint --stream --pattern /foo/bar test.xml
Node /foo/bar[1] matches pattern /foo/bar
Node /foo/bar matches pattern /foo/bar发布于 2011-03-10 14:28:55
看似没有文档的选项--xpath似乎更有用。
% cat data.xml
<project>
<name>
bob
</name>
<version>
1.1.1
</version>
</project>
% xmllint --xpath '/project/version/text()' data.xml | xargs -i echo -n "{}"
1.1.1
% xmllint --xpath '/project/name/text()' data.xml | xargs -i echo -n "{}"
bob发布于 2010-02-12 22:57:43
来自xmllint(1)手册页:
--pattern PATTERNVALUE
Used to exercise the pattern recognition engine, which can be
used with the reader interface to the parser. It allows to
select some nodes in the document based on an XPath (subset)
expression. Used for debugging.它只理解XPath的一个子集,其目的是帮助调试。真正理解XPath的库是libxslt(3)及其命令行工具xsltproc(1)。
libxml中的模式‘’模块“允许为树中的节点或基于解析器状态的节点编译和测试模式表达式”,它的文档生活在这里:http://xmlsoft.org/html/libxml-pattern.html
阿里。
https://stackoverflow.com/questions/2224613
复制相似问题