2010-08-19 15 views
0

Je récupère avec succès les données de réponse en utilisant l'expression XPath /ABCDE/réponse du xml,analyse syntaxique avec dom4j

<abcde> 
      <response>000</response> 
</abcde> 

Mais nous ne pouvions pas récupérer les données de réponse de la même xml mais avec quelques données supplémentaires

<abcde version="8.1" xmlns="http://www.litle.com/schema" 
     response="0" message="Valid Format"> 
      <response>000</response> 
</abcde> 

Qu'est-ce que je fais mal?

Répondre

2
package stackoverflow; 
import java.io.ByteArrayInputStream; 
import java.util.HashMap; 
import java.util.Map; 
import org.dom4j.Document; 
import org.dom4j.DocumentException; 
import org.dom4j.DocumentFactory; 
import org.dom4j.DocumentHelper; 
import org.dom4j.XPath; 
import org.dom4j.io.SAXReader; 
import org.dom4j.xpath.DefaultXPath; 
import org.jaxen.VariableContext; 

public class MakejdomWork { 
    public static void main(String[] args) { 
     new MakejdomWork().run(); 
    } 

    public void run() { 
     ByteArrayInputStream bis = new ByteArrayInputStream("<abcde version=\"8.1\" xmlns=\"http://www.litle.com/schema\"  response=\"0\" message=\"Valid Format\">   <response>000</response></abcde>".getBytes()); 
     //ByteArrayInputStream bis = new ByteArrayInputStream("<abcde><response>000</response></abcde>".getBytes()); 

     Map nsPrefixes = new HashMap(); 
     nsPrefixes.put("x", "http://www.litle.com/schema"); 

     DocumentFactory factory = new DocumentFactory(); 
     factory.setXPathNamespaceURIs(nsPrefixes); 

     SAXReader reader = new SAXReader(); 
     reader.setDocumentFactory(factory); 
     Document doc; 
     try { 
      doc = reader.read(bis); 
      Object value = doc.valueOf("/abcde/x:response"); 
      System.out.println(value); 
     } catch (DocumentException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Réponse courte: vous devez utiliser des préfixes d'espace de noms si votre analyseur est conscient espace de noms (qui est dom4j)