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


Автор: Grelloo 9.7.2006, 21:11
Проблема следующяя:
имеется произвольный HTML-документ, из которого требуется извлечь тег <A>, затем его
атрибуты и в зависимости от них обрабобтать  вложенный тег <IMG>
Пока что у меня получилось следующее:
Код
            m_doc = (HTMLDocument) m_kit.createDefaultDocument();

        //Получение атрибутов тега <A>
        HTMLDocument.Iterator it = m_doc.getIterator(HTML.Tag.A);
        for (; it.isValid(); it.next()){
            AttributeSet attrs = it.getAttributes();
            Object linkAttr = attrs.getAttribute(HTML.Attribute.HREF);
            System.out.println(linkAttr);
        }
        
        //Получение атрибутов тега <IMG>
        ElementIterator elit = new ElementIterator(m_doc);
        Element elem;
        while ((elem = elit.next()) != null) {
            if (elem.getName().equals("img")) {
                System.out.println(elit.next().getDocument().getDefaultRootElement());
                AttributeSet attrs2 = elem.getAttributes();
                Object scr = attrs2.getAttribute(HTML.Attribute.SRC);
                System.out.println(scr);
            }

При этом взять child у A или parent у IMG не получиться.  Пробовал  методами getElement, но в этом случае вместо тега A вылезает
p-implied и получить у него атрибуты не удается.   

Автор: skhilkov 11.7.2006, 10:05
почитай про LiveConnect, у меня с ним все окей. 

Автор: Grelloo 11.7.2006, 14:11
LiveConnect связан так-то с javascript, а не с java 

Автор: skhilkov 11.7.2006, 14:30
Нет, он как раз связывает одно с другим. Благодаря этому ты сможешь вызывать функции JavaScript из Java, и наоборот, соответственно имея в руках такой инструмент можно сделать многое, не говоря уж о получении атрибутов.

Добавлено @ 14:33 
Код


Object elems = ((JSObject) form).getMember("elements");
                    if (elems != null)
                    {
                        Object obj = _scriptObject.eval("document.forms['" + additionalFormName + "'].elements.length");
                        if (obj != null)
                        {Tools.Log("Additional form processing point 3");
                            int count = 0;
                            if (obj instanceof java.lang.Integer)
                            {
                                Integer intCount = (Integer) obj;
                                count = intCount.intValue();
                            }

Вот небольшой пример получения элементов HTML и их атрибутов

Добавлено @ 14:37 
Чуть не забыл - вот как можно создать объект JSObject :
Код

JSObject _scriptObject = JSObject.getWindow(this);
 

Автор: Grelloo 25.7.2006, 15:33
Хорошо, а как создать JSObject из потока, который получен от url? 

Автор: Woody 25.7.2006, 15:50
А работать с HTML как с XML документом нельзя? 

Автор: Grelloo 25.7.2006, 16:01
В принципе наверное можно, но хотелось бы работать как с html. Мне все-таки не понятно, почему не работает пример, который я привел 

Автор: skhilkov 27.7.2006, 06:56
Цитата(Grelloo @ 25.7.2006,  15:33)
Хорошо, а как создать JSObject из потока, который получен от url?

Не совсем понял про что ты говоришь... можно поподробнее? smile

Добавлено @ 07:02 
погоди.... ты работаешь не с апплетом smile ? То есть тебе надо получать аттрибуты у произвольных html документов? Тогда извини, я тебя неправильно понял. LiveConnect это библиотека для связывания апплета с JavaScript, так что прошу прощенья......  

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