如何使用关键字grep xml文件中的xml块

如何使用关键字grep xml文件中的xml块,xml,shell,unix,xpath,xmllint,Xml,Shell,Unix,Xpath,Xmllint,我有一个Sample.xml文件,其中包含许多服务 结构是这样的 问题: 输入:队列名称 输出:服务块 样品 输入:ABC.getme2 输出: <service name="GETME2" min="1" max="10" idleTime="300" backend="ABC"> <handlerContainer className="com.abc.xyz.wqere.abcqwere">

我有一个Sample.xml文件,其中包含许多服务 结构是这样的

问题: 输入:队列名称 输出:服务块

样品 输入:ABC.getme2

输出:

<service name="GETME2" min="1" max="10" idleTime="300" backend="ABC">
                            <handlerContainer className="com.abc.xyz.wqere.abcqwere">
                            <handler className="com.abc.xyz.qweqweqwe.werwerwerwer"/>
                            </handlerContainer>
                            <mqListener queue="ABC.getme2" suggExpiry="30" minExpiry="4" maxExpiry="500" copyMessageId="true"/>
                    </service>
我试过下面的答案

xmllint --xpath '//service[@name="GETME"]' Sample.xml

但没有成功

以下是输出:

Usage : xmllint [options] XMLfiles ...
    Parse the XML files and output the result of the parsing
    --version : display the version of the XML library used
    --debug : dump a debug tree of the in-memory document
    --shell : run a navigating shell
    --debugent : debug the entities defined in the document
    --copy : used to test the internal copy implementation
    --recover : output what was parsable on broken XML documents
    --noent : substitute entity references by their value
    --noout : don't output the result tree
    --path 'paths': provide a set of paths for resources
    --load-trace : print trace of all external entites loaded
    --nonet : refuse to fetch DTDs or entities over network
    --nocompact : do not generate compact text nodes
    --htmlout : output results as HTML
    --nowrap : do not put HTML doc wrapper
    --valid : validate the document in addition to std well-formed check
    --postvalid : do a posteriori validation, i.e after parsing
    --dtdvalid URL : do a posteriori validation against a given DTD
    --dtdvalidfpi FPI : same but name the DTD with a Public Identifier
    --timing : print some timings
    --output file or -o file: save to a given file
    --repeat : repeat 100 times, for timing or profiling
    --insert : ad-hoc test for valid insertions
    --compress : turn on gzip compression of output
    --html : use the HTML parser
    --xmlout : force to use the XML serializer when using --html
    --push : use the push mode of the parser
    --memory : parse from memory
    --maxmem nbbytes : limits memory allocation to nbbytes bytes
    --nowarning : do not emit warnings from parser/validator
    --noblanks : drop (ignorable?) blanks spaces
    --nocdata : replace cdata section with text nodes
    --format : reformat/reindent the input
    --encode encoding : output in the given encoding
    --dropdtd : remove the DOCTYPE of the input docs
    --c14n : save in W3C canonical format (with comments)
    --exc-c14n : save in W3C exclusive canonical format (with comments)
    --nsclean : remove redundant namespace declarations
    --testIO : test user I/O support
    --catalogs : use SGML catalogs from $SGML_CATALOG_FILES
                 otherwise XML Catalogs starting from 
             file:///etc/xml/catalog are activated by default
    --nocatalogs: deactivate all catalogs
    --auto : generate a small doc on the fly
    --xinclude : do XInclude processing
    --noxincludenode : same but do not generate XInclude nodes
    --loaddtd : fetch external DTD
    --dtdattr : loaddtd + populate the tree with inherited attributes 
    --stream : use the streaming interface to process very large files
    --walker : create a reader and walk though the resulting doc
    --pattern pattern_value : test the pattern support
    --chkregister : verify the node registration code
    --relaxng schema : do RelaxNG validation against the schema
    --schema schema : do validation against the WXS schema
    --schematron schema : do validation against a schematron
    --sax1: use the old SAX1 interfaces for processing
    --sax: do not build a tree but work just at the SAX level

Libxml project home page: http://xmlsoft.org/
To report bugs or get some help check: http://xmlsoft.org/bugs.html
这是版本

xmllint: using libxml version 20626

命令几乎正确,您只需修复XPATH表达式:

xmllint --xpath '//service[@name="GETME"]' Sample.xml
                          \ no slash hare
但是,您必须检查
xmllint
是否实际支持XPath:

$ xmllint --version
xmllint: using libxml version 20902
   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 

用于此目的的替代工具是:


有什么区别?您的原始示例的选项和文件顺序正确。我不知道。我添加了堆栈跟踪,似乎xpath不存在。根据堆栈跟踪,xpath在推荐的用法中不存在。这是xmllint的旧版本。顺便说一下,提供的文本不是堆栈跟踪,请参见xmllint:using libxml version 20626 ksh:xmlstarlet:not found[没有这样的文件或目录]。而Im只在读取模式=(显然,在使用之前需要安装一个工具。我没有安装工具的权限。还有其他方法吗?…所以,您没有支持XPath的xmllint,您没有xmlstarlet——我们真的需要知道您有什么(可能是最新的Python?)在此之前,我们可以提供更多帮助。我已经看到一些在awk和sed中完成的XML解析。这可以使用这些命令来完成吗?我真的不确定我有什么有用的东西。xmllint和xmlstarlet是最好的选择-不,
awk
sed
不足以完成任务。另请参见——它从(精确)开始关于语言理论的陈述。诚然,
awk
比BREs更具表现力,理论上人们可以用awk编写一个XML解析器,但是——就像任何其他XML解析器一样——这将是一个需要构建和测试的重大项目;大型XML操作库需要以人年为单位的努力才能达到完全遵从性。您可以创建一些使用awk时,它看起来可以工作一段时间,但如果再加上名称空间、注释、CDATA部分,您将很快遇到错误。使用适当的XML解析器,您将得到一些实际保证可以做正确事情的东西。也就是说,任何现代平台都将包括一个包含适当XML解析器的Python解释器。C从shell中加入Python其实并不难。
xmlstarlet sel -t -v "/services/service[@name='GETME']/mqListener/@queue" Sample.xml
Usage : xmllint [options] XMLfiles ...
    Parse the XML files and output the result of the parsing
    --version : display the version of the XML library used
    --debug : dump a debug tree of the in-memory document
    --shell : run a navigating shell
    --debugent : debug the entities defined in the document
    --copy : used to test the internal copy implementation
    --recover : output what was parsable on broken XML documents
    --noent : substitute entity references by their value
    --noout : don't output the result tree
    --path 'paths': provide a set of paths for resources
    --load-trace : print trace of all external entites loaded
    --nonet : refuse to fetch DTDs or entities over network
    --nocompact : do not generate compact text nodes
    --htmlout : output results as HTML
    --nowrap : do not put HTML doc wrapper
    --valid : validate the document in addition to std well-formed check
    --postvalid : do a posteriori validation, i.e after parsing
    --dtdvalid URL : do a posteriori validation against a given DTD
    --dtdvalidfpi FPI : same but name the DTD with a Public Identifier
    --timing : print some timings
    --output file or -o file: save to a given file
    --repeat : repeat 100 times, for timing or profiling
    --insert : ad-hoc test for valid insertions
    --compress : turn on gzip compression of output
    --html : use the HTML parser
    --xmlout : force to use the XML serializer when using --html
    --push : use the push mode of the parser
    --memory : parse from memory
    --maxmem nbbytes : limits memory allocation to nbbytes bytes
    --nowarning : do not emit warnings from parser/validator
    --noblanks : drop (ignorable?) blanks spaces
    --nocdata : replace cdata section with text nodes
    --format : reformat/reindent the input
    --encode encoding : output in the given encoding
    --dropdtd : remove the DOCTYPE of the input docs
    --c14n : save in W3C canonical format (with comments)
    --exc-c14n : save in W3C exclusive canonical format (with comments)
    --nsclean : remove redundant namespace declarations
    --testIO : test user I/O support
    --catalogs : use SGML catalogs from $SGML_CATALOG_FILES
                 otherwise XML Catalogs starting from 
             file:///etc/xml/catalog are activated by default
    --nocatalogs: deactivate all catalogs
    --auto : generate a small doc on the fly
    --xinclude : do XInclude processing
    --noxincludenode : same but do not generate XInclude nodes
    --loaddtd : fetch external DTD
    --dtdattr : loaddtd + populate the tree with inherited attributes 
    --stream : use the streaming interface to process very large files
    --walker : create a reader and walk though the resulting doc
    --pattern pattern_value : test the pattern support
    --chkregister : verify the node registration code
    --relaxng schema : do RelaxNG validation against the schema
    --schema schema : do validation against the WXS schema
    --schematron schema : do validation against a schematron
    --sax1: use the old SAX1 interfaces for processing
    --sax: do not build a tree but work just at the SAX level

Libxml project home page: http://xmlsoft.org/
To report bugs or get some help check: http://xmlsoft.org/bugs.html
xmllint: using libxml version 20626
xmllint --xpath '//service[@name="GETME"]' Sample.xml
                          \ no slash hare
$ xmllint --version
xmllint: using libxml version 20902
   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 
xmlstarlet sel -t -c '//service[@name="GETME"]' -n <Sample.xml
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output omit-xml-declaration="yes" indent="no"/>
  <xsl:template match="/">
    <xsl:copy-of select="//service[@name=&quot;GETME&quot;]"/>
    <xsl:value-of select="'&#10;'"/>
  </xsl:template>
</xsl:stylesheet>