0

我有这样的问题。我必须解析 xml 并使用 ascii 编码的字符获取值。我的 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 ie 字符串被截断为# 为什么?xml中允许该字符#,不是吗?如何获得完整的字符串值?

4

1 回答 1

0

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

您可能想使用 sax 默认处理程序。看看它是否有效。如果不是,可能需要扩展默认处理程序并覆盖此方法的行为以正确存储值。其中 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;
于 2012-08-06T17:37:41.413 回答