2010-08-16 19 views
2

-je obtenir un fichier XML à partir du site (http://www.abc.com/),si le fichier XML est "xmlns", comment puis-je obtenir un texte à partir du fichier XML en utilisant XPath

URL est: http://www.abc.com/api/api.xml

contenu

est:

<?xml version="1.0" encoding="utf-8"?> 
<root xmlns="http://www.abc.com/"> 
    <name>Hello!</name> 
</root> 

il a xmlns="http://www.abc.com/" dans un fichier XML,

maintenant, je l'aide JDOM XPath pour obtenir un texte Hello!

XPath xpath = XPath.newInstance("/root/name/text()"); 
SAXBuilder builder = new SAXBuilder(); 
Document doc = builder.build(new URL("http://www.abc.com/api/api.xml")); 

System.out.println(xpath.valueOf(doc)); //nothing to print... 

Je teste pour supprimer xmlns="http://www.abc.com/" du fichier XML, c'est du travail! Comment changer mon code java pour obtenir Hello!, s'il existe xmlns="http://www.abc.com/"?

(je ne peux pas CHAGNE ce fichier XML)

Merci pour l'aide :)

Répondre

2

Vous aurez besoin de faire la requête au courant de l'espace de noms XML. Cette réponse semble ici comme il fera l'affaire:

Default Xml Namespace JDOM and XPATH

Vous pouvez également modifier votre requête à utiliser nom local pour ignorer les espaces de noms:

XPath xpath = XPath.newInstance("/*[local-name() = 'root']"); 

qui devrait renvoyer le nœud nommé racine. Autrement dit, si elle le supporte et que je l'ai tapé correctement! :) Je ne suis pas familier avec les API java pour XML + XPATH. Sachez qu'il existe des espaces de noms XML pour distinguer le noeud 'root' de tout autre noeud nommé 'root'. Tout comme les espaces de noms de classe/paquet. Les ignorer pourrait conduire à une collision de noms. Votre kilométrage peut varier.

HTH, Zach

1

Je n'ai pas fait récemment. Mais une recherche rapide trouvé

http://illegalargumentexception.blogspot.com/2009/05/java-using-xpath-with-namespaces-and.html

qui pointent vers l'utilisation d'un XPathFactory:

NamespaceContext context = new NamespaceContextMap("http://www.abc.com/"); 

Ou, vous pouvez utiliser la réponse de Zach et ignorer l'espace de nom donné (si je l'ai compris à droite) . Cela peut entraîner des problèmes s'il y a plus de nœuds «racine» au même niveau de hiérarchie.