2012-08-06 3 views
0

J'ai un tel problème. Je dois analyser XML et obtenir de la valeur avec des caractères codés ASCII. une partie de mon xmlandroid Données getNodeValue avec ascii

<response> 
    <object> 
    <id>793675</id> 
    <name>&#381;irm&#363;n&#371;</name> 
... 

pour obtenir une valeur name i utiliser les fonctions

public String getValue(Element item, String str) { 
     NodeList n = item.getElementsByTagName(str); 
     return getElementValue(n.item(0)); 
    } 

public final String getElementValue(Node elem) { 
      Node child; 
      if(elem != null){ 
       if (elem.hasChildNodes()){ 
        for(child = elem.getFirstChild(); child != null; child = child.getNextSibling()){ 
         if(child.getNodeType() == Node.TEXT_NODE || child.getNodeType() == Node.CDATA_SECTION_NODE || child.getNodeType() == Node.ELEMENT_NODE){ 
          return child.getNodeValue(); 
         } 
        } 
       } 
      } 
      return ""; 
     } 

de telle manière:

Document doc = XMLfromString(xml); 
NodeList nodes = doc.getElementsByTagName("object"); 
Element e = (Element)nodes.item(0); 
String restName = Html.fromHtml(getValue(e, "name")).toString(); 

mais dans le résultat que je n'ai que la valeur, qui contient des caractères avant # je ne dispose que & dans restName c.-à-STRI ng est tronqué à # pourquoi? le caractère # est autorisé dans le fichier XML, n'est-ce pas? Comment puis-je obtenir une valeur de chaîne complète?

Répondre

0

Utilisez un SAX et la méthode de remplacement, comme indiqué ci-dessous:

Vous pouvez utiliser gestionnaire par défaut de sax. Voir si cela fonctionne. Si ce n'est pas le cas, vous devrez peut-être étendre le gestionnaire par défaut et remplacer le comportement de cette méthode pour stocker la valeur correctement. Où myURLString est une variable que vous définissez dans votre classe étendue. Cette variable peut ensuite être accédée dans la méthode endElement pour eample. vous avez un contrôle total sur ceci ici.

Donc, une façon est d'étendre org.xml.sax.helpers.DefaultHandler;

 protected String myValueString; 


    @Override 
    public void characters(char[] ch, int start, int length) throws SAXException 
    { 
     super.characters(ch, start, length); // deal with escape values here. 
     myValueString = ... 

    } 

puis à l'intérieur endElement() {

 check if matches your type and if so use myValueString; 
Questions connexes