Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > SAX parsing


Автор: Larrr 7.7.2006, 16:18
Здравствуйте!  
Возникла такая проблема с SAXом:
имеется XML-file
Код

<beans>
<bean id="aa" class="A">
     <property name="message">
          <value>Hello form beans A</value>
     </property>
</bean>
<bean id="bb" class="B">
     <property name="message">
          <value>Hello form beans B</value>
     </property>
</bean>
</beans>



имеется код, который его парсит и выводит все ids у элементов <bean>

Код

//imports

public class IdReader  extends DefaultHandler
{
    public void configureAndParse()
    {
      try
        {
            XMLReader reader = null;
            SAXParserFactory factory = SAXParserFactory.newInstance();
            factory.setValidating(false);
            SAXParser parser = factory.newSAXParser();
            reader = parser.getXMLReader();
            reader.setContentHandler(new IdReader());
            reader.setErrorHandler(new IdReader());
            InputSource input = new InputSource("conf.xml");
            System.out.println(reader.toString());
            reader.parse(input);

       }
        catch (Exception e)
        {
            System.err.println(e);
            System.exit(1);
        }
    }

    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException
    {
        if (qName == "bean")
        {
            String id = atts.getValue("id");
            System.out.println(id);
        }

    }

  public static void main(String[] agrs)
     {
         IdReader ir = new IdReader();
         ir.configureAndParse();
     }
}


Все работает как надо и выводится то что надо ("aa","bb"), НО проблема в том, что мне надо результат поместить в массив строк(и потом его передать с помощью специального метода другому классу).И как только я пытаюсь внести некоторые изменения в startElement(), чтобы оно писало не System.out.println(id); а, например

Код

 public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException
    {
        if (qName == "bean")
        {
            String id = atts.getValue("id");
            String s = id; //использование вспомогательной строки
            System.out.println(s);
        }
    }


то появляется окошко с надписью "schema change not implemented. Operation not supported by VM"

Как бы это обойти?  smile   

Автор: LSD 7.7.2006, 18:19
1. Для сравнения строк надо использовать equals() а не ==.
2. s - это не вспомогательная строка, а просто еще одна ссылка на уже существующую.
3. У меня после исправления 1. все нормально работает в обоих вариантах, да и не должно быть такой ошибки.

Рассказывай подробно, что именно делаешь, какая версия JDK, что за окошко выскакивает и т.д. 

Автор: Larrr 7.7.2006, 23:25
Уже разобралась - сообщение "schema change not implemented. Operation not supported by VM" Идея показывает при попытке исправлять код в то время как он дебагится при следующем запуске. Неопытность сказывается...  smile 
Спасибо!  smile   

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)