使用ascii的android getNodeValue数据

时间:2012-08-06 17:27:15

标签: android xml parsing ascii

我有这样的问题。 我必须解析xml并使用ascii编码的caracters获取值。 我xml的一部分

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

获取值name我使用函数

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 "";
      }

这样:

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

但是在结果中我只有值,其中包含#之前的字符 &中只有restName 即字符串被截断为# 为什么? xml中允许使用字符#,不是吗? 如何获得完整的字符串值?

1 个答案:

答案 0 :(得分:0)

使用Sax Parser和override方法,如下所示:

您可能希望使用sax默认处理程序。看看它是否有效。如果不是,可能需要扩展默认的Handler并覆盖此方法的行为以正确存储值。 myURLString是您在扩展类中定义的变量。然后可以在endElement方法中访问此变量以进行示例。你完全可以控制它。

所以一种方法是扩展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 = ...

    }

然后在endElement(){

     check if matches your type and if so use myValueString;