Xpoint
   [напомнить пароль]

Отобразить HTML содержащийся в XML.Снова :)

Метки: [без меток]
2007-05-18 12:53:18 [обр] mudruy[досье]
сообщение промодерировано

Добый день, форумчане :)У меня есть вопрос который задавался много раз, но конкретного ответа я так и не нашел :(
Каким образом получить HTML содержащийся в тэгах XML.XML сгенерирован сервером,и получен объектом XMLHttpRequest.
Есть много записей разбора XML, я использовал такую -

function ereturned(xml){
//xml это объект возвращеннго документа, id глобальная переменная айдишник дивки в которую надо вставить HTML      
var list ='';
//ключ по которому иксэмэль разделяеться
   var key  = "param";
   var xRow = xml.getElementsByTagName(key);
    var aftertitle = xRow[0].childNodes[0].firstChild.nodeValue;
   list =  '<div id="title" >'+aftertitle+'<br></div>';
//вот здесь ничего и не выходит.это просто моя попытка :)
        window.document.getElementById(id).innerHTML = aftertitle;
}

nodeText тоже не дает результата.Вариант предложеный на этом форуме

if(typeof document.importNode == 'function'){
  container.appendChild(document.importNode(afterdate);
} else if(type of XMLSerializer == 'object'){
  container.innerHTML = new XMLSerializer(afterdate);
} else if(typeof div.xml != 'undefined'){
  container.innerHTML = afterdate.xml
}

где, как я понимаю var container = window.document.getElementById(id); у меня понимать эту XML не хочет даже для Opera, Mozilla, т.е importNode не фурычит.А желателен еще и IE.Где то там же было упоминание обхода XML-документа одной функцией в 20 строк, решающий мою проблему.Подскажите реализацию кроссбраузерного преобразования:)Чтоб еще и работало :)

спустя 49 минут [обр] Николай Комиссаров aka Survivor(0/81)[досье]

mudruy[досье] хм..
ну вот мы имеет xml:

<data>
<![CDATA[
<h2>text<h2>
]]></data>

и такой код:

var topNode = ...;//здесь у нас лежит элемент <data>
document.getElementById(id).innerHTML = topNode.childNodes[0].data;
спустя 35 минут [обр] mudruy[досье]
Вопрос :)
var topNode = ...;//здесь у нас лежит элемент <data>
А как он лежит?
alert(xml.childNodes[0].title); -Из моего предыдущего примера выдает undefined.
alert(afterdate.childNodes[0].title); - Выдает ошибку на странице childNodes.0 есть null или не являеться объектом)
спустя 22 минуты [обр] Дворнов Роман(0/109)[досье]

а как насчет

alert(xml.documentElement.childNodes[0].title);

?

спустя 12 минут [обр] mudruy[досье]
Упрямо пишет undefined.Вот моя XML:
<?xml version='1.0' encoding='utf-8'?><data><param><title><p>Заголовок</p></title><resume>резюме</resume><text>Текст</text></param></data>
Соответственно, в описанном мной вопросе проблемная строчка работает правильно пока нет тэга) если есть любой тэг то пишет null
спустя 1 час 8 минут [обр] Николай Комиссаров aka Survivor(0/81)[досье]
mudruy[досье]
function getXMLTopNode (tagName, xmlDoc){
    //for Mozilla, search and return top node by name
    if (xmlDoc.responseXML){ 
        var temp=xmlDoc.responseXML.getElementsByTagName(tagName); 
        var z=temp[0];  
    }   
    //for IE,  get top node from DOM
    else 
        var z=xmlDoc.documentElement; 
    if (z) 
        return z;    //return top node
    return document.createElement("DIV");   //return dummy node
};

function ereturned(xml){            
    var xRow = getXMLTopNode("data",xml);
    window.document.getElementById(id).innerHTML = xRow.childNodes[0].data;
}
спустя 24 минуты [обр] mudruy[досье]
Николай Комиссаров aka Survivor[досье]
 var temp=xmlDoc.responseXML.getElementsByTagName(tagName); - XML у меня отреспонсилось перед передаче, надо ли делать это снова?
вопрос - правильно ли поправил код?
 if (z)
        {return z ;} else{ //return top node
    return document.createElement("DIV");
      }//return dummy node
и вопрос.Почему во всех браузерах все равно undefined :(
спустя 5 минут [обр] Николай Комиссаров aka Survivor(0/81)[досье]
mudruy[досье] в ereturned должен приходит XmlHttpRequest или ActiveX обьект в IE. см тот хмл который находится в моем первом посте. для него код рабочий. как минимум Opera9, FF, IE6-7
спустя 27 минут [обр] mudruy[досье]
сообщение промодерировано

УФФ.посмотри плиз.изменил свою XML на твою.возвращает ее ПХП файл с сервера в виде
<?xml version='1.0' encoding='utf-8'?><data><![CDATA[<h2>text<h2>]]></data>
если хидер убрать вообще все умирает.
В своей функции реквеста я убрал респонз и терерь она выглялит так(и получаеться возвращает то что ты написал) -

var http_request = false;
function emakeRequest(url,change,method,contentType) {
var params = "id="+id+"&title="+title+"&resume="+resume+"&text="+text+"&change="+change;
http_request = false;
                if (window.XMLHttpRequest) { // Мазила Сафари ...
                    http_request = new XMLHttpRequest();
                    if (http_request.overrideMimeType) {
                        http_request.overrideMimeType('text/xml');
                    }
                } else if (window.ActiveXObject) { // Масдайефский ЙЕ
                    try {
                        http_request = new ActiveXObject("Msxml2.XMLHTTP");
                    } catch (e) {
                        try {
                        http_request = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch (e) {}
                    }
                }
                if (!http_request) {
                    alert('Траблы с реквестом млин ((( ');
                    return false;
                }
            if (!method){
               method = 'GET';}
               
                        
               if (!contentType && method == 'POST'){
               contentType = 'application/x-www-form-urlencoded';
               }
                  
             http_request.onreadystatechange = EalertContents;
      
                http_request.open(method, url, true);
            if (contentType) {
            http_request.setRequestHeader ("Content-Type",contentType);   
            }
            
              if (id){  http_request.send(params);} else { http_request.send(null);}
            }
            function EalertContents() {
                if (http_request.readyState == 4) {
                    if (http_request.status == 200) {
                        var xmldata = http_request;
                     
                              ereturned(xmldata);   
                    } else {
                        alert('XML не возвращаеться!!! ');
                    }
                }
            }
И вот этот код второго поста непонятен.точа с запятой после кавычки функции
if (z) 
        return z;    //return top node
    return document.createElement("DIV");   //return dummy node
};

теперь после модернизации моего реквеста innerHTML все равно вставляет undefined.Может прикол в том что ты берешь локальную XML , а я ловлю ее сгенерированную с сервера?

спустя 51 минуту [обр] mudruy[досье]
Приспособил твой код под мою XML.Работает и все возвращает только не части XML с HTML.Если пытаюсь вытащить это сразу пишет null.
спустя 9 минут [обр] Николай Комиссаров aka Survivor(0/81)[досье]
а как по поводу продебажить? раз пишет null, зн пытаешься вытащить не оттуда
спустя 16 минут [обр] mudruy[досье]
Поэкспериментировал.Оно вытаскивает часть текста до первого тэга.Как только встречаеться тег - стронг или болд, неважно какой, вывод умирает.
спустя 6 минут [обр] Николай Комиссаров aka Survivor(0/81)[досье]
mudruy[досье] а в CDATA вы html обернули?
спустя 10 минут [обр] mudruy[досье]
сообщение промодерировано

Николай Комиссаров aka Survivor[досье]
Вообще то да.Может я это сделал как то некорректно.у меня получаеться файл вида

<?xml version='1.0' encoding='utf-8'?><data><param><title>![CDATA[ Какой <p>либо</p> тайтл ]]</title></data></param>

и все равно отображаеться только слово Какой ))

спустя 10 минут [обр] Николай Комиссаров aka Survivor(0/81)[досье]
ну конечно... надо:
<?xml version='1.0' encoding='utf-8'?><data><param><title><![CDATA[ Какой <p>либо</p> тайтл ]]></title></data></param>
спустя 1 минуту [обр] Николай Комиссаров aka Survivor(0/81)[досье]
Да и вообще закрывающие data и param у вас нужно поменять местами
спустя 7 минут [обр] mudruy[досье]
дата и парам я писал сюда руками, а вот CDATA меня подвело :) спасибо большое :)))
Powered by POEM™ Engine Copyright © 2002-2005