Пример #1
0
  public void replay(ContentHandler handler) throws SAXException {
    SAXEvent saxEvent;
    Iterator itr = events.iterator();

    while (itr.hasNext()) {
      saxEvent = (SAXEvent) itr.next();

      switch (saxEvent.event) {
          // replay to ContentHandler
        case SAXEvent.PROCESSING_INSTRUCTION:
          handler.processingInstruction((String) saxEvent.getParm(0), (String) saxEvent.getParm(1));

          break;

        case SAXEvent.START_PREFIX_MAPPING:
          handler.startPrefixMapping((String) saxEvent.getParm(0), (String) saxEvent.getParm(1));

          break;

        case SAXEvent.END_PREFIX_MAPPING:
          handler.endPrefixMapping((String) saxEvent.getParm(0));

          break;

        case SAXEvent.START_DOCUMENT:
          handler.startDocument();

          break;

        case SAXEvent.END_DOCUMENT:
          handler.endDocument();

          break;

        case SAXEvent.START_ELEMENT:
          AttributesImpl attributes = new AttributesImpl();
          List attParmList = (List) saxEvent.getParm(3);

          if (attParmList != null) {
            Iterator attsItr = attParmList.iterator();

            while (attsItr.hasNext()) {
              String[] attParms = (String[]) attsItr.next();
              attributes.addAttribute(
                  attParms[0], attParms[1], attParms[2], attParms[3], attParms[4]);
            }
          }

          handler.startElement(
              (String) saxEvent.getParm(0),
              (String) saxEvent.getParm(1),
              (String) saxEvent.getParm(2),
              attributes);

          break;

        case SAXEvent.END_ELEMENT:
          handler.endElement(
              (String) saxEvent.getParm(0),
              (String) saxEvent.getParm(1),
              (String) saxEvent.getParm(2));

          break;

        case SAXEvent.CHARACTERS:
          char[] chars = (char[]) saxEvent.getParm(0);
          int start = ((Integer) saxEvent.getParm(1)).intValue();
          int end = ((Integer) saxEvent.getParm(2)).intValue();
          handler.characters(chars, start, end);

          break;

          // replay to LexicalHandler
        case SAXEvent.START_DTD:
          ((LexicalHandler) handler)
              .startDTD(
                  (String) saxEvent.getParm(0),
                  (String) saxEvent.getParm(1),
                  (String) saxEvent.getParm(2));

          break;

        case SAXEvent.END_DTD:
          ((LexicalHandler) handler).endDTD();

          break;

        case SAXEvent.START_ENTITY:
          ((LexicalHandler) handler).startEntity((String) saxEvent.getParm(0));

          break;

        case SAXEvent.END_ENTITY:
          ((LexicalHandler) handler).endEntity((String) saxEvent.getParm(0));

          break;

        case SAXEvent.START_CDATA:
          ((LexicalHandler) handler).startCDATA();

          break;

        case SAXEvent.END_CDATA:
          ((LexicalHandler) handler).endCDATA();

          break;

        case SAXEvent.COMMENT:
          char[] cchars = (char[]) saxEvent.getParm(0);
          int cstart = ((Integer) saxEvent.getParm(1)).intValue();
          int cend = ((Integer) saxEvent.getParm(2)).intValue();
          ((LexicalHandler) handler).comment(cchars, cstart, cend);

          break;

          // replay to DeclHandler
        case SAXEvent.ELEMENT_DECL:
          ((DeclHandler) handler)
              .elementDecl((String) saxEvent.getParm(0), (String) saxEvent.getParm(1));

          break;

        case SAXEvent.ATTRIBUTE_DECL:
          ((DeclHandler) handler)
              .attributeDecl(
                  (String) saxEvent.getParm(0),
                  (String) saxEvent.getParm(1),
                  (String) saxEvent.getParm(2),
                  (String) saxEvent.getParm(3),
                  (String) saxEvent.getParm(4));

          break;

        case SAXEvent.INTERNAL_ENTITY_DECL:
          ((DeclHandler) handler)
              .internalEntityDecl((String) saxEvent.getParm(0), (String) saxEvent.getParm(1));

          break;

        case SAXEvent.EXTERNAL_ENTITY_DECL:
          ((DeclHandler) handler)
              .externalEntityDecl(
                  (String) saxEvent.getParm(0),
                  (String) saxEvent.getParm(1),
                  (String) saxEvent.getParm(2));

          break;

        default:
          throw new SAXException("Unrecognized event: " + saxEvent.event);
      }
    }
  }