Use as ferramentas do Unix para procurar por um bloco de definição em um XML.

1

Estou usando um XML com definições neste formato -

<definition name="ticketOpen" extends="ticketUpdate">
    <put name="title" value="Open Ticket" />
    <put name="mainForm" value="open.jsp" />
    <put name="XYZ" value="PQR" />
            ...
</definition>

Se eu quiser pesquisar a definição de "ticketOpen", posso usar grep como este -

grep "definition *name *= *\"ticketOpen\"" definitions.xml

No entanto, isso só retorna a primeira linha da definição. Como posso especificar que depois de encontrar a primeira linha correspondente, grep (ou qualquer outro utilitário) deve procurar a tag de fechamento </definition> e imprimir todas as linhas entre elas?

    
por Wes 14.02.2014 / 16:26

3 respostas

2

Use sed:

sed -n -e '/definition/,/\/definition/ p' definitions.xml
    
por 14.02.2014 / 16:34
2

O comando xml2 converterá o XML em texto simples.

$ cat foo.xml 
<?xml version='1.0'?>
<doc name="document">
<object name="foo">
<key name="bar">baz</key>
</object>
<definition name="ticketOpen" extends="ticketUpdate">
<put name="title" value="Open Ticket" />
<put name="mainForm" value="open.jsp" />
<put name="XYZ" value="PQR" />
</definition>
</doc>
$ xml2 < foo.xml 
/doc/@name=document
/doc/object/@name=foo
/doc/object/key/@name=bar
/doc/object/key=baz
/doc/definition/@name=ticketOpen
/doc/definition/@extends=ticketUpdate
/doc/definition/put/@name=title
/doc/definition/put/@value=Open Ticket
/doc/definition/put
/doc/definition/put/@name=mainForm
/doc/definition/put/@value=open.jsp
/doc/definition/put
/doc/definition/put/@name=XYZ
/doc/definition/put/@value=PQR

Eu não sei como é o resto do seu documento XML, mas assumindo que esta é a única instância de definition , você pode diretamente grep para isso.

    
por 14.02.2014 / 22:54
1

Parece que isso é algo que seria mais apropriado usar o xpath. Se essa é uma opção, posso obter uma linha de comando de amostra.

Este comando está disponível no Ubuntu a partir do pacote libxml-xpath-perl .

    
por 14.02.2014 / 21:50