【问题标题】:SAX parsing of '&' character [duplicate]'&' 字符的 SAX 解析 [重复]
【发布时间】:2011-12-29 09:03:45
【问题描述】:

当我尝试解析 & char 时,我在 SAX 解析中遇到问题,所有其他特殊字符都在 SAX 解析器中自动解析,但我在 & 字符中遇到问题.. 有人请给我一些建议吗??

首先,我将来自 web 服务的 XML 保存到一个字符串中,并并排检查它

     if(ques_xml.contains("&"))
     {
                ques_xml=ques_xml.replaceAll("&", "&");
    }

//以及我用来解析我保存的XML的以下方法。 公共无效 XmlParsing(字符串问题_xml) { 试试 {

        /** Handling XML */
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();

        /** Create handler to handle XML Tags ( extends DefaultHandler ) */
        MyXmlHandler myXMLHandler = new MyXmlHandler();
        xr.setContentHandler(myXMLHandler);
        xr.parse( new InputSource(new StringReader(questions_xml)));


        } catch (Exception e) {
            String err = (e.getMessage()==null)?"XMLParsing exception":e.getMessage();
            Log.e("XMLParsing Exception",err); 
        }


}

【问题讨论】:

  • 有什么问题? '&' 错过了吗?你得到一个异常抛出?
  • 不,问题是字符串是:“hello & world”,然后解析后只显示:hello
  • 如果可能使用不同的解析器,你为什么要使用 SAX 解析器。
  • 我认为 SAX 解析器会自动用它们的响应代码替换所有特殊字符,但不知道为什么它不替换 &
  • 这个问题你解决了吗???我也面临同样的问题。我尝试所有给出答案但没有解决它。

标签: android xml-parsing


【解决方案1】:

在这种情况下,您可以使用 StringBuffer。

在 startElement 中初始化 StringBuffer。

   public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        //reset
         buffer = new StringBuffer();
....
}

然后在字符中只需将内容添加到 StringBuffer。

public void characters(char[] ch, int start, int length) throws SAXException {
        buffer.append(new String(ch,start,length));
    }

然后最后在endElement中使用这个StringBuffer。

public void endElement(String uri, String localName, String qName) throws SAXException {
       // use StringBuffer's object buffer here
}

这肯定会奏效。

【讨论】:

    【解决方案2】:

    使用SAX解析器解析特殊符号(&)总是有问题,我认为只有这件事可以帮助你,Handling Special Characters

    编辑:

    当您处理包含许多特殊字符的大型 XML 或 HTML 块时,您可以使用 CDATA section。 CDATA 部分的工作方式与 HTML 中的 <code>...</code> 类似,但更重要的是:CDATA 部分中的所有空白都很重要,其中的字符不会被解释为 XML。 CDATA 部分以 .

    开头

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      相关资源
      最近更新 更多