Analisando XML de um script de shell

4

Eu tenho um arquivo de dados como este:

<Key name="com.ahsay.afc.cpf.UserGroup" content="" allowMultiple="Y">
    <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="1328200856753" />
    <Value name="rsv-group-name" inheritParentAttribute="Y" type="string" data="group 1" />
    <Value name="rsv-user-type" inheritParentAttribute="Y" type="string" data="backup-user" />
    <Value name="rsv-owner" inheritParentAttribute="Y" type="string" data="" />
    <Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y">
        <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" />
        <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name1" />
    </Key>
    <Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y">
        <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" />
        <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name2" />
    </Key>
</Key>
<Key name="com.ahsay.afc.cpf.UserGroup" content="" allowMultiple="Y">
    <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="1328200856753" />
    <Value name="rsv-group-name" inheritParentAttribute="Y" type="string" data="group 2" />
    <Value name="rsv-user-type" inheritParentAttribute="Y" type="string" data="backup-user" />
    <Value name="rsv-owner" inheritParentAttribute="Y" type="string" data="" />
    <Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y">
        <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" />
        <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name3" />
    </Key>
    <Key name="com.ahsay.afc.cpf.User" content="" allowMultiple="Y">
        <Value name="rsv-id" inheritParentAttribute="Y" type="string" data="13279083887401" />
        <Value name="rsv-login-name" inheritParentAttribute="Y" type="string" data="name4" />
    </Key>
</Key>

Eu sei o nome de login do registro que quero e preciso combiná-lo com um grupo. Digamos que eu queira saber qual grupo name3 é (a resposta é group 3 ). Atualmente posso tirar o nome do grupo do arquivo com:

perl -ne 'print "$_\n" foreach /name="rsv-group-name".*\ data="([^"]*)"/g;'

mas não tenho ideia de como combiná-lo com um usuário. Como posso fazer isso em um script?

    
por Miq 02.02.2012 / 20:32

3 respostas

1

Procure usar scripts xslt para transformar ou analisar seu XML, xsltproc é o binário que você está procurando e w3cschools tem um bom guia para começar.

    
por 03.02.2012 / 00:11
1

O grupo é group 2 , não group 3 :

$ xmlstarlet sel -t -v '//Key[Key/Value[@name="rsv-login-name" and @data="name3"]]/Value[@name="rsv-group-name"]/@data' -nl file.xml
group 2

A consulta XPATH procura um Key/Key/Value nó que tenha name="rsv-login-name" e data="name3" , e para o Key que esse nó é um Key/Value do nó, ele retorna o atributo data para o Value node que tem name="rsv-group-name" .

O XML que usei aqui é um documento ligeiramente modificado que adiciona uma tag <root> no início e uma tag </root> end no final, apenas para torná-lo um documento XML bem formado.

    
por 21.04.2018 / 22:14
0

awk solution.

$ awk -F= '/name="rsv-group-name"/{g=$NF}/data="name4"/{print substr(g,2,length(g)-5)}' inputfile
    
por 25.05.2018 / 21:47