Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML элементы не вставляются в XHTML дерево, разница между Element и HtmlElement 
:(
    Опции темы
AndyMur
Дата 15.8.2008, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 22.3.2008
Где: Russia

Репутация: нет
Всего: нет



Добрый день...

следующая проблема возникла, после подгрузки xml документа требуется часть содержимого вставить в DOM дерево страницы

такой код не решает проблемы, потому как узел хоть и вставляется является невидимым

Код

function()
                        {
                            try //Internet Explorer
                            {
                                xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
                                xmlDoc.async="false";
                                xmlDoc.loadXML("<?xml version='1.0' encoding='utf-8' ?><elements><input type='button' caption='bbb' /></elements>");
                            }
                            catch(e)
                            {
                                try //Firefox, Mozilla, Opera, etc.
                                {
                                    parser=new DOMParser();
                                    xmlDoc=parser.parseFromString("<?xml version='1.0' encoding='utf-8'?><elements><input type='button' caption='bbb'/></elements>", "text/xml");
                                }
                                catch(e) 
                                {
                                    alert('error while parsing ' + e.message);
                                }
                            }
                            var input = xmlDoc.documentElement.getElementsByTagName('input')[0];
document.getElementById('div').appendChild(input);




Проблема в том что document.createElement('input') - является Object InputHtmlElement, а input выдранный из дерева Object Element'ом...
Не подскажите как решить проблему? Каким-то образом привести XML NODE Object к Html Object, чтобы он воспринимался браузером.
PM MAIL WWW ICQ   Вверх
AndyMur
Дата 15.8.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 22.3.2008
Где: Russia

Репутация: нет
Всего: нет



upd.

Вопрос был решен, но не до конца :(

xml был приведен к xhtml, что позволило следующему коду начать работать в FX 2.0 и Opera 9.20

В IE происходит исключение в строке appendChild : Интерфейс не поддерживается.

Есть мнение что IE так и не сумел признать элемент родным HTMLElement'ом.

Если есть идеи, прошу делиться smile

Код привожу:

Код

function()
{
    try //Internet Explorer
    {
        xmlDoc=new ActiveXObject('MSXML.DomDocument');
        xmlDoc.async="false";
        xmlDoc.loadXML("<?xml version='1.0' encoding='utf-8' ?><html xmlns='http://www.w3.org/1999/xhtml' version='-//W3C//DTD XHTML 1.2//EN' xml:lang='en'><head></head><body><input type='button' caption='bbb' /></body></html>");
    }
    catch(e)
    {
        try //Firefox, Mozilla, Opera, etc.
        {
            parser=new DOMParser();
            xmlDoc=parser.parseFromString("<?xml version='1.0' encoding='utf-8' ?><html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en'><head></head><body><input type='button' caption='bbb' /></html></body></html>", "text/xml");
        }
        catch(e) 
        {
            alert('error while parsing ' + e.message);
        }
    }
    var input = xmlDoc.documentElement.childNodes[0];
    document.getElementById('div').appendChild(input);
}

PM MAIL WWW ICQ   Вверх
АндрейМиндубаев
Дата 15.8.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.8.2008
Где: Нижний Новгород

Репутация: нет
Всего: нет



AndyMur, по идее нужно было бы использовать document.importNode, но в IE7 такой функции нет.

Но вот так вроде бы работает в IE7 так, как ожидается:
Код

    var input = xmlDoc.getElementsByTagName("input")[0];
    var a = document.createDocumentFragment();
    a.appendChild(document.createElement("div"));
    a.childNodes[0].outerHTML = input.xml;
    document.getElementById('div').appendChild(a);

    alert(document.getElementById('div').innerHTML); // <input type=button xmlns="http://www.w3.org/1999/xhtml" caption="bbb" />

(ну там всякие проверки надо поставить... всё такое)
PM MAIL WWW Jabber   Вверх
AndyMur
Дата 15.8.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 22.3.2008
Где: Russia

Репутация: нет
Всего: нет



xmlns="http://www.w3.org/1999/xhtml" 

Обязательно вставлять в каждый элемент?

Спасибо про importNode, быстро глянул в документацию - вроде бы IE5+ должен держать, проверю.

И на седьмом IE проверить не успел, на шестом валилось smile
PM MAIL WWW ICQ   Вверх
АндрейМиндубаев
Дата 15.8.2008, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.8.2008
Где: Нижний Новгород

Репутация: нет
Всего: нет



> xmlns="http://www.w3.org/1999/xhtml" 
> Обязательно вставлять в каждый элемент?
AndyMur, не - оно само так получилось. Почему - не знаю =)

А importNode - это только в теории "надо было бы". IE её не поддерживает.
PM MAIL WWW Jabber   Вверх
AndyMur
Дата 15.8.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 22.3.2008
Где: Russia

Репутация: нет
Всего: нет



Да, он сам, я уже вижу =)

Короче

var input = xmlDoc.documentElement.getElementsByTagName('input')[0];
document.getElementById('div').innerHTML = input.xml;

заработало, с учетом того что <div id='div'></div> был на странице, все счастливы

(отмечу, что в FX и Opera все по-человечески) Я просто не знал о нестандартном 
свойстве xml (в FX его нет).

Только интересно как без innerHTML =) Придется в IE писать код отличный от стандартного, без appendChild и с innerHTML =\
PM MAIL WWW ICQ   Вверх
diadiavova
Дата 18.8.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 11
Всего: 142



Без innerHTML будет примерно так:
Код

function addButton()
{
    try //Internet Explorer
    {
        xmlDoc=new ActiveXObject('MSXML.DomDocument');
        xmlDoc.async="false";
        xmlDoc.loadXML("<?xml version='1.0' encoding='utf-8' ?><html xmlns='http://www.w3.org/1999/xhtml' version='-//W3C//DTD XHTML 1.2//EN' xml:lang='en'><head></head><body><input type='button' value='knopka' caption='bbb' /></body></html>");
    }
    catch(e)
    {
        try //Firefox, Mozilla, Opera, etc.
        {
            parser=new DOMParser();
            xmlDoc=parser.parseFromString("<?xml version='1.0' encoding='utf-8' ?><html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en'><head></head><body><input type='button' caption='bbb' /></html></body></html>", "text/xml");
        }
        catch(e) 
        {
            alert('error while parsing ' + e.message);
        }
    }
    var input = xmlDoc.getElementsByTagName("input")[0];
    var htmlInput=document.createElement(input.tagName);
    for (var i=0;i<input.attributes.length;i++)
    {
        htmlInput.setAttribute(input.attributes(i).name,input.attributes(i).value)
    }
    document.getElementById('div').appendChild(htmlInput);
    
}
 


здесь я скопировал код из второго сообщения, кое-что изменил(например я не встречал такого атрибута caption - соответственно заменил его на value), но в принципе логика понятна, в IE работает. 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0738 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.