像这样:
xmllint --xpath '
substring-before(//*[contains(text(), "-SNAPSHOT")]/text(), "-SNAPSHOT")
' file.xml
来自管道:
curl -s 'http://example.com/query_string' |
xmllint --xpath '
substring-before(//*[contains(text(), "-SNAPSHOT")]/text(), "-SNAPSHOT")
' -
您可以将结尾的 - 替换为 /dev/stdin。
输出
x.x.x
注意
不要使用正则表达式解析 XML/HTML,使用适当的 XML/HTML 解析器和强大的 xpath 查询。
您可以使用以下方法之一:
xmllint 通常默认安装libxml2-utils, xpath1
xmlstarlet 可以编辑、选择、变换... 默认不安装,xpath1
xpath 通过 perl 的模块 XML::XPath, xpath1 安装
xidelxpath3
saxon-lint 我自己的项目,包装在@Michael Kay 的 Saxon-HE Java 库,xpath3
或者你可以使用高级语言和适当的库,我认为:
python 的lxml (from lxml import etree)
perl's XML::LibXML, XML::XPath, XML::Twig::XPath, HTML::TreeBuilder::XPath
rubynokogiri,check this example
phpDOMXpath,check this example
检查:Using regular expressions with HTML tags