I have a file Sample.xml which contains a lot of services inside it and the structure looks like this
我有一个文件Sample.xml,其中包含很多服务,结构如下所示
PROBLEM: INPUT: QUEUE NAME OUTPUT: SERVICE BLOCK
问题:输入:队列名称输出:服务块
sample INPUT: ABC.getme2
示例INPUT:ABC.getme2
OUTPUT:
<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>
XML Structure:
<?xml version="1.0" encoding="UTF-8"?>
<deploymentconfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<configfile>sample.xml</configfile>
<exceptionsFilterConfigFile>asdasd.xml</exceptionsFilterConfigFile>
<keyInfoConfigFile>asdasd.xml</keyInfoConfigFile>
<services>
<service name="GETME" 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.getme" suggExpiry="30" minExpiry="4" maxExpiry="500" copyMessageId="true"/>
</service>
<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>
. . . .a lot of services like this . . . .
. . . .a lot of services like this . . . .
. . . .a lot of services like this . . . .
. . . .a lot of services like this . . . .
</services>
<batchServices>
<batchService name="batch1">
<executor className="com.abc.xyz.qwer.qweqwewqe.ffdsdfsdfsdfsdf" />
</batchService>
<batchService name="batch2">
<executor className="com.abc.xyz.qwer.qweqwewqe.zxcsadsad" />
</batchService>
. . . .a lot of batch services like this . . . .
. . . .a lot of batch services like this . . . .
. . . .a lot of batch services like this . . . .
. . . .a lot of batch services like this . . . .
</batchServices>
<timerservices>
<timerservice> - a lot of timeservice
</timerservices>
<connectionPools>
<pool>
<name>asdasd</name>
<driver>oracle.jdbc.driver.OracleDriver</driver>
<url>$asdasd_URL</url>
<userId>$asdasd_USER</userId>
<password>$asdasd_PASSWORD</password>
<minConnections>0</minConnections>
<maxConnections>10</maxConnections>
<poolUrl>jdbc:asdsad:asdasdsad</poolUrl>
<testSql>select * from abc</testSql>
</pool>
. . a lot of pools. . .
</connectionpools>
</deploymentconfig>
I need to grep an xml block like this:
我需要像这样grep一个xml块:
<service name="GETME" 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.getme" suggExpiry="30" minExpiry="4" maxExpiry="500" copyMessageId="true"/>
</service>
and I only need to provide the queue name
我只需要提供队列名称
QUEUENAME=INSERT_HERE
grep ______________ $QUEUENAME. . .
I tried the answer below
我试过下面的答案
xmllint --xpath '//service[@name="GETME"]' Sample.xml
and
xmllint --xpath '/services/service[@name="GETME"]' Sample.xml
and
xmlstarlet sel -t -v "/services/service[@name='GETME']/mqListener/@queue" Sample.xml
but was unsuccesful
但是不成功
Here is the output:
这是输出:
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
Here is the version
这是版本
xmllint: using libxml version 20626
2 个解决方案
#1
0
The command is almost right, you only have to fix the XPATH expression:
该命令几乎是正确的,您只需修复XPATH表达式:
xmllint --xpath '//service[@name="GETME"]' Sample.xml
\ no slash hare
However, you have to check whether your xmllint
actually supports XPATHs:
但是,您必须检查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
#2
0
An alternate tool for the purpose is XMLStarlet:
另一个用于此目的的工具是XMLStarlet:
xmlstarlet sel -t -c '//service[@name="GETME"]' -n <Sample.xml
Incidentally, xmlstarlet
can also output XSLT which you can apply with xsltproc, and thus on systems without xmlstarlet installed. In this case:
顺便提一下,xmlstarlet还可以输出XSLT,您可以使用xsltproc,因此在没有安装xmlstarlet的系统上。在这种情况下:
<?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="GETME"]"/>
<xsl:value-of select="' '"/>
</xsl:template>
</xsl:stylesheet>
#1
0
The command is almost right, you only have to fix the XPATH expression:
该命令几乎是正确的,您只需修复XPATH表达式:
xmllint --xpath '//service[@name="GETME"]' Sample.xml
\ no slash hare
However, you have to check whether your xmllint
actually supports XPATHs:
但是,您必须检查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
#2
0
An alternate tool for the purpose is XMLStarlet:
另一个用于此目的的工具是XMLStarlet:
xmlstarlet sel -t -c '//service[@name="GETME"]' -n <Sample.xml
Incidentally, xmlstarlet
can also output XSLT which you can apply with xsltproc, and thus on systems without xmlstarlet installed. In this case:
顺便提一下,xmlstarlet还可以输出XSLT,您可以使用xsltproc,因此在没有安装xmlstarlet的系统上。在这种情况下:
<?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="GETME"]"/>
<xsl:value-of select="' '"/>
</xsl:template>
</xsl:stylesheet>