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


Автор: Diesel Draft 7.10.2006, 12:21

Здраствуйте. У меня есть XML такого вида:

Код

<packet>
  <session>74</session>
    <item>
        <type>MPublic</type>
        <to>user2</to>
        <text>some text</text>
    </item>
</packet>


Вме нужна фунція котороя б перетворяла XML в масив и обратно. Ну я з масива в XML и сам напишу. А как щделать парсер я не знаю. 

П.С. Все даные загружаютса XMLHttpRequest. Но дом елемент не создаетса.


Автор: rcdimon 7.10.2006, 14:11
Регулярками разумеется

Автор: Sardar 7.10.2006, 14:18
Цитата(rcdimon @  7.10.2006,  13:11 Найти цитируемый пост)
Регулярками разумеется

Запретить это выражение как чудовищную ересь  smile 

Цитата(Diesel Draft @  7.10.2006,  11:21 Найти цитируемый пост)
П.С. Все даные загружаютса XMLHttpRequest. Но дом елемент не создаетса.

А как это тебе удалось? responseXML будет создан, если нет синтаксических ошибок в полученом XML. У тебя их вроде нет. Можно создать DOM документ http://www.quirksmode.org/dom/importxml.html, замени в примере load(url) на loadXML(твой_текст).

Автор: Diesel Draft 7.10.2006, 22:24
вот откуда я  беру XML http://avtobroker.org.ua/server.php

Добавлено @ 22:29 
Не можу зайти нормально на силку 


А можете дать готовую фунцию

Автор: Sardar 8.10.2006, 00:23
Цитата(Diesel Draft @  7.10.2006,  21:24 Найти цитируемый пост)
вот откуда я  беру XML http://avtobroker.org.ua/server.php

Ну и? Дёргаешь то ведь через XMLHttpRequest, так и обращайся к request.responseXML.documentElement.getElementsByTagName("item");

Moжно ИЕ'шный http://www.devguru.com/Technologies/xmldom/QuickRef/node_selectNodes.html запользовать, для мозиллы реализацию selectNodes находишь в гугле (или пользуешь чистый http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226/, но он громоздок)

Автор: Diesel Draft 8.10.2006, 22:19
XMLHttpRequest для ктого XML не хочет создавать  DOM

Автор: Sardar 9.10.2006, 00:47
Цитата(Diesel Draft @  8.10.2006,  21:19 Найти цитируемый пост)
XMLHttpRequest для ктого XML не хочет создавать  DOM

А слабо прочитать .statusText ?  Также с чего ты решил что responseXML не создаёться?
На то могут быть две причины: ошибка синтаксиса (не заметил), отсутствие <?xml version="1.0" ?>

Автор: skyboy 9.10.2006, 10:25
Цитата(Sardar @  8.10.2006,  23:47 Найти цитируемый пост)
отсутствие <?xml version="1.0" ?> 

или отсутсвие '<response></response>'...

Автор: Diesel Draft 9.10.2006, 18:37
ни однго ни другого у меня нет. Зара попробую поставить

Автор: Diesel Draft 9.10.2006, 19:09
А можете дать сылку на документ которий 100% загружаетса через XMLHttpRequest и зоздает ДОМ? 

Автор: Sardar 9.10.2006, 22:57
Сохрани это у себя на сервере в любой .xml

Код
<?xml version="1.0" encoding="utf-8"?>
<!-- если сохраняешь не в UTF-8, то encoding нужно поменять (cp1251 - виндовая кирилица) -->
<diesel>
   <draft>Я бы изменил мир, но Бог не дает исходники</draft>
</diesel>


Затем открой любым браузером, убедись, что ни на что не ругается. Подгрузи как обычно, всё должно работать.

Автор: Diesel Draft 10.10.2006, 09:59
нет, не пошло  smile 

Я даю код програмы. Возвожно у меня там штото не так. 


Код


                    function sendRequest(to, type, text){
                        text = to + '?' + text;
                        
                        var oRequest = getRequestObject();
                        
                        oRequest.open(type, text, true, this.User, this.Password);
                        
                        if (type == "POST"){
                            try {
                                oRequest.setRequestHeader("Method", "POST " + text + " HTTP/1.1");
                                oRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                            }
                            catch(e){
                                alert("You brouser dot's support POST metod");
                                return false;
                            }
                        }
                        
                        oRequest.onreadystatechange = function(){
                        if (oRequest.readyState != 4) return;
                            if(oRequest.status == 200){
                                oAjax.Text = oRequest.responseText;
                                    if(oRequest.responseXML.documentElement && oRequest.responseXML){
                                        oAjax.XML = XMLHTTPRequest.responseXML;
                                    }else{
                                        oAjax.XML = null;
                                    }
                                oAjax.OnSend(oAjax.Text, oAjax.XML);
                            }else {
                                alert("Error retrieving data!");
                            }
                            
                            delete oRequest;
                            oRequest = null;
                            oAjax.OnSendEnd();    
                        }
                        
                        
                        this.OnSendBegin();
                        oRequest.send(text);
                        if (oRequest){
                            delete oRequest;
                        }                        

                        
                        
                    }

                    function Ajax(){
                        this.SendTo        = sendRequest;
                        this.QSend        = null
                        this.Send        = null;
                        this.Add         = null;
                        
                        this.OnSendBegin    = function(){};
                        this.OnSend        = function(text, xml){};
                        this.OnSendEnd        = function(){};
                        
                        this.Type            = "POST";
                        this.URL            = '';
                        this.User            = '';
                        this.Password        = '';
                        
                        this.SendText        = '';
                        
                        this.Text          = '';
                        this.XML            = null;
                        
                        
                        
                        this.QSend = function(field, value){
                            var text = field + '=' + encodeURIComponent(value);
                            this.SendTo(this.URL, this.Type , text);    
                        }
                        
                        this.Send = function(){
                            this.SendTo(this.URL, this.Type , this.SendText);
                            this.SendText = '';    
                        }
                        
                        this.Add = function(field, value){
                            if(this.SendText == ''){
                                this.SendText = field + '=' + encodeURIComponent(value);
                            }else{
                                this.SendText = this.SendText + '&' + field + '=' + encodeURIComponent(value);
                            }    
                        }                        
                        
                        
                    }
                    
                    
                    
                    oAjax = new Ajax;    


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