Obtenha os nós xml onde o texto da pesquisa é encontrado

0

Eu tenho um xml bem formatado e recuado semelhante ao abaixo. Eu preciso pegar as tags mono que tem um texto " link "

<root>
<mono id="1">
<tag1>http://google.com</tag1>
</mono>
<mono id="2">
<tag1>http://yahoo.com</tag1>
</mono>
<mono id="3">
<tag1>http://mysite.com</tag1>
</mono>
<mono id="4">
<tag1>http://yahoo.com</tag1>
</mono>
</root>

Eu estava tentando com o comando abaixo.

cat -n index.xml | sed -n "/ root /, / root > / p" | grep " link "

6  <tag1>http://yahoo.com</tag1>
12  <tag1>http://yahoo.com</tag1>

Eu preciso de uma saída como essa. Mas não sei como obter os nós mono que possuem meu texto de pesquisa.

<mono id="2">
<tag1>http://yahoo.com</tag1>
</mono>
<mono id="4">
<tag1>http://yahoo.com</tag1>
</mono>
    
por Samuel Finny 22.01.2018 / 07:35

1 resposta

0

Usando o XMLStarlet :

$ xml sel -t -c '//mono[tag1 = "http://yahoo.com"]' -nl file.xml
<mono id="2">
<tag1>http://yahoo.com</tag1>
</mono><mono id="4">
<tag1>http://yahoo.com</tag1>
</mono>

O XPath //mono[tag1 = "http://yahoo.com"] significa "qualquer mongo do nó que tenha um subnó chamado tag1 cujo valor é http://yahoo.com ". O -c significa "me dê uma cópia de ..." e o% final -nl insere uma nova linha no final da saída.

    
por 22.01.2018 / 09:03