2017-07-13 1 views
0

J'ai un objet XMLPath, et je souhaite prendre les noms d'attributs pour certains nœuds. Par exemple,Comment obtenir les valeurs d'attributs d'un XML avec XMLPath?

<?xml version="1.0" encoding="UTF-8"?> 
<md:EntityDescriptor entityID="https://scspr0269974001.c4.com/saml/metadata" ID="https___scspr0269974001.c2_saml_metadata" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> 
    <md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" WantAssertionsSigned="true" AuthnRequestsSigned="true"> 
    <md:SingleLogoutService Location="https://scspr0269974001.company2.com/saml/SingleLogout" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"/> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName</md:NameIDFormat> 
     <md:AssertionConsumerService Location="https://scspr0269974001.company1.com/saml/SSO" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" isDefault="true" index="0"/> 
    <md:AssertionConsumerService Location="https://scspr0269974001.company2.com/saml/SSO" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" index="1"/> 
    </md:SPSSODescriptor> 
</md:EntityDescriptor> 

Ce XML, ce qui est l'expression de XMLPosition pour obtenir l'attribut Location du md:SingleLogoutService?

je peux obtenir le entityID du Rapport de gestion: EntityDescriptor ce qui suit: entityId=metadataXml.get("md:[email protected]")

Mais pour l'attribut d'emplacement, que je suis en train de faire comme

logoutURL=metadataXml.get("'md:EntityDescriptor'.'md:SPSSODescriptor'.'md:SingleLogoutService'[email protected]") 

Et la sortie que je reçois est [] et rien d'autre.

+0

comment avez-vous votre parser XML? – daggett

Répondre

1

Ici, vous allez, les commentaires en ligne:

def xml = """<?xml version="1.0" encoding="UTF-8"?> 
<md:EntityDescriptor entityID="https://scspr0269974001.c4.com/saml/metadata" ID="https___scspr0269974001.c2_saml_metadata" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"> 
    <md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" WantAssertionsSigned="true" AuthnRequestsSigned="true"> 
    <md:SingleLogoutService Location="https://scspr0269974001.company2.com/saml/SingleLogout" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"/> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> 
     <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName</md:NameIDFormat> 
     <md:AssertionConsumerService Location="https://scspr0269974001.company1.com/saml/SSO" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" isDefault="true" index="0"/> 
    <md:AssertionConsumerService Location="https://scspr0269974001.company2.com/saml/SSO" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact" index="1"/> 
    </md:SPSSODescriptor> 
</md:EntityDescriptor>""" 
//Parse the xml with XmlSlurper 
def pxml = new XmlSlurper().parseText(xml) 
//Extract the required attribute and print 
println pxml.'**'.find{it.name() == 'SingleLogoutService'}[email protected]() 
//alternative to above line is that you can use below statement as well; both yield same result 
println [email protected]() 

-vous un essayer rapidement en ligne Demo

+0

Cela a résolu mon problème parfaitement! –

+1

@AdithyaDas, heureux de savoir que c'est utile. Appréciez upvote pour les réponses utiles. – Rao