]$ xmllint --version
xmllint: using libxml version 20626
我的xml文件如下所示:
<projects>
<architecture name="ARCH1">
<project label="StringA1" type="StringB1" state="StringC1"/>
......
</architecture>
<architecture name="ARCH2">
<project label="StringA2" type="StringB2" state="StringC2"/>
......
</architecture>
</projects>
例如,我希望在StringB2
和name==ARCH2
条件下获得值state==StringC2
。是否可以使用xmllint
命令行选项,如果是,怎么做?一些例子将是有益的。
我可以使用sed
或awk
提取这些内容,但这可能不是一个好的解决方案。
答案 0 :(得分:4)
使用:
xmllint --xpath '//architecture[@name="ARCH2"]/project/@type'
或者如果您只想要字符串而只需要字符串:
xmllint --xpath 'string(//architecture[@name="ARCH2"]/project/@type)'
在测试此语句时,我意识到,xmllint(20708)的ubuntu(12.04)版本在执行此命令时以段错误终止。我从https://git.gnome.org/browse/libxml2/refs/克隆了最新版本并进行了编译。现在上面的命令有效。
答案 1 :(得分:3)
尝试以下
xmllint --xpath 'string(///project[../@name="ARCH1" and @state="StringC1"]/@type)' data.xml
版本:
$ xmllint --version
xmllint: using libxml version 20900
compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib Lzma