java解析器sax没有得到价值&在我的领域

时间:2015-09-24 08:08:19

标签: java

我的xml文件中有更多元素包含&和其他人物html>。

我测试了我的代码,但它获得了我的字段的第一部分,例如:

 SERIES & FILMS

它只提供SERIES一词。

其他例子:

C>SUDO

它只给出C.

我的代码,我的字段名称是"摘要":

   try {

     SAXParserFactory factory = SAXParserFactory.newInstance();
     SAXParser saxParser = factory.newSAXParser();
     chars = new StringBuffer();
     DefaultHandler handler = new DefaultHandler() {



     public void startElement(String uri, String localName,
     String qName, Attributes attributes)
     throws SAXException {

     System.out.println("Start Element :" + qName);

     if (qName.equals(SUMMARY2)) {
     bfSummary = true;
     }
     if (qName.equals(SERVICE_DATA)) {
     idServiceData = attributes.getValue("id");
     bfServicedata = true;

     }

     }

     public void endElement(String uri, String localName,
     String qName) throws SAXException {

     System.out.println("End Element :" + qName + ""
     + mListBaseLineByEpgId.size());

     // maliste.put(listeId, summary);
     malisteParThem.add(summary);
     if (mListBaseLineByEpgId.get(idServiceData) != null) {
     List<String> listeModif = mListBaseLineByEpgId
     .get(idServiceData);
     for (String chaine : malisteParThem) {
     listeModif.add(chaine);
     }
     mListBaseLineByEpgId.replace(idServiceData, listeModif);
     } else {

     mListBaseLineByEpgId.put(idServiceData, malisteParThem);
     }
     malisteParThem = new ArrayList<String>();

     }

     public void characters(char ch[], int start, int length)
     throws SAXException {

     if (bfSummary) {
     summary = new String(ch, start, length);
     summary = summary.replace(BEFORETILESUMMARY, "");
     // chars.append(summary);
     // summary=chars.toString();
     summary = removeHtmlFrom(summary);
     System.out.println("Summary : " + summary);
     bfSummary = false;
     }
     if (bfServicedata) {
     System.out.println("listeId : " + idServiceData);
     bfServicedata = false;
     }

     }

     };
     File file = new File(cheminFichier);
     InputStream inputStream = new FileInputStream(file);
     Reader reader = new InputStreamReader(inputStream);

     InputSource is = new InputSource(reader);
     //is.setEncoding("ISO-8859-1");
     saxParser.parse(is, handler);

     } catch (Exception e) {
     e.printStackTrace();
     }

谢谢。

1 个答案:

答案 0 :(得分:0)

也许这个问题与SAX解析器的意外行为有关:允许(按规范)拆分元素的文本部分并为同一元素多次调用characters()方法。

您需要做的是拥有StringBufferStringBuilder实例变量。您在startElement()初始化它,在characters()附加到该endElement()并获取{{1}}上的全文

请参阅此问题以获取更多信息JAVA SAX parser split calls to characters()