Fonctionnellement, les deux blocs devraient être les mêmesJava lecture élément XML sans préfixe, mais dans le cadre d'un espace de noms
<soapenv:Body>
<ns1:login xmlns:ns1="urn:soap.sof.com">
<userInfo>
<username>superuser</username>
<password>qapass</password>
</userInfo>
</ns1:login>
</soapenv:Body>
-----------------------
<soapenv:Body>
<ns1:login xmlns:ns1="urn:soap.sof.com">
<ns1:userInfo>
<ns1:username>superuser</ns1:username>
<ns1:password>qapass</ns1:password>
</ns1:userInfo>
</ns1:login>
</soapenv:Body>
Cependant, comment quand je lus à l'aide AXIS2 et je l'ai testé avec java6 ainsi, J'ai un problème.
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage soapMsg = factory.createMessage(new MimeHeaders(), SimpleTest.class.getResourceAsStream("LoginSoap.xml"));
SOAPBody body = soapMsg.getSOAPBody();
NodeList nodeList = body.getElementsByTagNameNS("urn:soap.sof.com", "login");
System.out.println("Try to get login element" + nodeList.getLength()); // I can get the login element
Node item = nodeList.item(0);
NodeList elementsByTagNameNS = ((Element)item).getElementsByTagNameNS("urn:soap.sof.com", "username");
System.out.println("try to get username element " + elementsByTagNameNS.getLength());
Donc, si je remplace la 2e getElementsByTagNameNS avec ((Element) Point) .getElementsByTagName ("nom d'utilisateur") ;, je suis en mesure d'obtenir l'élément de nom d'utilisateur. Est-ce que le nom d'utilisateur n'a pas l'espace de noms ns1 même s'il n'a pas le préfixe? Suis-je supposé garder une trace de la portée de l'espace de noms pour lire un élément? Ne serait-il pas méchant si mes éléments xml sont profonds? Y at-il une solution de contournement où je peux lire l'élément dans l'espace de noms ns1 sans savoir si un préfixe est défini?
D'après ce document http://www.rpbourret.com /xml/NamespacesFAQ.htm, l'espace de noms hérite des éléments. En outre, le corps SOAP supérieur est généré par les stubs AXIS2 (créés par wsdl2java de AXIS2). Tous les types complexes sont définis dans l'espace de noms cible urn: soap.sof.com. Si l'espace de noms hérite d'éléments, AXIS n'aurait pas créé d'éléments sans préfixe, ai-je tort? – wsxedc
Le préfixe ns1 est dans la portée, mais un élément sans préfixe se trouve dans l'espace de nom par défaut, pas dans l'espace de nom de son parent, et aucun espace de noms par défaut n'est déclaré. – Affe
Pouvez-vous me montrer un exemple de code pour utiliser XPath? Serait-il beaucoup plus lent par rapport à l'utilisation de getElementByTag? – wsxedc