Obtenir la valeur du Nœud à partir d'un XML à l'aide de xmllint
J'ai un xml appelé Det.xml comme ceci :
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns4:grtHgetRed xmlns:ns2="http://object" xmlns:ns3="http://object" xmlns:ns4="http://object">
<RequestId>lol</RequestId>
<MessageDateTime>54.009</MessageDateTime>
<SenderId>UH</SenderId>
<ReceiverId>GER</ReceiverId>
<TrackingNumber>45</TrackingNumber>
<ServerName>trewds</ServerName>
<ResponseType>success</ResponseType>
<StatusInfo>
<Status>success</Status>
<SystemMessage>Hagert</SystemMessage>
<UserMessage>Hgert</UserMessage>
<Origination>htref</Origination>
</StatusInfo>
</ns4:grtHgetRed>
</S:Body>
</S:Envelope>
Je suis en train d'essayer d'obtenir le ResponseType
la valeur du nœud success
de l'aide xmllint
en shell script Unix et j'ai donc essayé le suivant :
echo "cat //*[local-name()='S:Envelope'/*[local-name()='S:Body']/*[local-name()='ns4:grtHgetRed']/*[local-name()='ResponseType']" | xmllint --shell Det
.xml | sed '/^\/>/d' | sed 's/<[^>]*.//g'
Mais cela ne fonctionne pas . Aussi je n'ai pas xpath
dans mon environnement unix . Quelqu'un peut-il me dire ce que je fais mal ?
Double Possible de Natif de commande shell set pour extraire la valeur du nœud à partir de XML
OriginalL'auteur The Dark Knight | 2013-09-24
Vous devez vous connecter pour publier un commentaire.
La
local-name()
est juste du peu après les deux points, donc au lieu de, par exemple,local-name()='S:Envelope'
essayez juste delocal-name()='Envelope'
.Ou vous souhaitez peut-être envisager un autre outil tel que xmlstarlet qui a un meilleur support pour ce genre de chose.
J'ai essayé celui
statusMSG=="$(echo "cat /Envelope/Body/grtHgetRed/ResponseType/text()" | xmllint --nocdata --shell response.xml | sed '1d;$d')"
Puis, quand je neecho "$statusMSG"
, je trouve l'écho d'être vide .ne fonctionnera certainement pas parce que ce serait à la recherche pour un élément avec aucun espace de noms, et votre XML qu'elle a dans la
http://schemas.xmlsoap.org/soap/envelope/
espace de noms.OriginalL'auteur Ian Roberts
Si il n'y a qu'un seul ResponseType élément dans le fichier XML, utilisez la commande suivante pour simplifier les choses:
La
//
est la syntaxe XPath pour "trouver cet élément n'importe où dans le document".La
text()
fonction retourne le contenu de l'élément, ce qui signifie que vous n'avez pas besoin de la poursuite de massage le résultat avecsed
et. al.Cela a fonctionné pour moi sur les deux Solaris et Linux pour qui
xmllint
n'a pas le--xpath
disponible en option.OriginalL'auteur jpwilksch
Je ne sais pas ce que vous faites mal... Si à l'aide de XMLlint n'est pas obligatoire, vous pouvez utiliser JDom, fonctionne comme un charme pour les exigences comme la vôtre... Juste une suggestion...
Oups.. Désolé... souviendrez que...
OriginalL'auteur TheLostMind