JavaScript « Работа с xml из js

Здравствуйте. Пробую парсить хml javascript'ом - ничего не поучается.

От сервера получаю такой вот код:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .xml.geshi_code {font-family:monospace;} .xml.geshi_code .imp {font-weight: bold; color: red;} .xml.geshi_code .es0 {color: #000099; font-weight: bold;} .xml.geshi_code .br0 {color: #66cc66;} .xml.geshi_code .sy0 {color: #66cc66;} .xml.geshi_code .st0 {color: #ff0000;} .xml.geshi_code .sc-1 {color: #808080; font-style: italic;} .xml.geshi_code .sc0 {color: #00bbdd;} .xml.geshi_code .sc1 {color: #ddbb00;} .xml.geshi_code .sc2 {color: #339933;} .xml.geshi_code .sc3 {color: #009900;} .xml.geshi_code .re0 {color: #000066;} .xml.geshi_code .re1 {color: #000000; font-weight: bold;} .xml.geshi_code .re2 {color: #000000; font-weight: bold;} .xml.geshi_code span.xtra { display:block; }

<opensearch:totalResults>3878</opensearch:totalResults>
<opensearch:startIndex>0</opensearch:startIndex>
<opensearch:itemsPerPage>30</opensearch:itemsPerPage><trackmatches>
<track>
    <name>Name </name>
    <artist> Artist </artist>
    <url>http://link</url>
    <streamable fulltrack="0">1</streamable>
    <listeners>19831</listeners>
            <image size="small">http://link/image.jpg</image>
        <mbid></mbid>
</track>
 




Ну и пытаюсь парсить его вот так:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

      var t = XML.getElementsByTagName('track');
    for(i=0;i<t.length;i++) {
      track = t[i];
      code += '<div class="track">';
      code += track.childNodes[1].nodeValue;
      code += '</div>';
    }
   return code;
 




nodeValue почему-то возвращает undefined :(
помогите пожалуйста разобратся с XML в js , а особенно как получать значения
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .xml.geshi_code {font-family:monospace;} .xml.geshi_code .imp {font-weight: bold; color: red;} .xml.geshi_code .es0 {color: #000099; font-weight: bold;} .xml.geshi_code .br0 {color: #66cc66;} .xml.geshi_code .sy0 {color: #66cc66;} .xml.geshi_code .st0 {color: #ff0000;} .xml.geshi_code .sc-1 {color: #808080; font-style: italic;} .xml.geshi_code .sc0 {color: #00bbdd;} .xml.geshi_code .sc1 {color: #ddbb00;} .xml.geshi_code .sc2 {color: #339933;} .xml.geshi_code .sc3 {color: #009900;} .xml.geshi_code .re0 {color: #000066;} .xml.geshi_code .re1 {color: #000000; font-weight: bold;} .xml.geshi_code .re2 {color: #000000; font-weight: bold;} .xml.geshi_code span.xtra { display:block; }

<opensearch:totalResults>3878</opensearch:totalResults>
 


вот таких тегов.Ну и посоветуйте хороший мануал :)

1 ответов


В интеренете этого материала сколько угодно. Законодатели - Мозилла и Майкрософт.

Работа с XML точно такая же как и с обычным DOM.
Вы на правильном пути. Попробуйте воспользоваться отладкой при разработке такого рода кода и что бы сразу в режиме реального времени видеть все свойства и значения дерева XML. Firebug вам в помощь.

Попробуйте начать с простых примеров:
Parsing XML in JavaScript
jQuery Makes Parsing XML Easy
Working With XML, jQuery, and JavaScript

Мне хватило 4х статей, что бы разобраться с основами DOM.


Что касается неймспейсов в XML, то для них в JS придумали XMLdata.getElementsByTagNameNS:

Вот наш XML (myXMLTest)


<opensearch:totalResults>3878</opensearch:totalResults>
<opensearch:startIndex>0</opensearch:startIndex>
<opensearch:itemsPerPage>30</opensearch:itemsPerPage>
 
Примерно так мы осуществляем доступ:

// так мы получаем доступ к элементу - opensearch:totalResults
var totalResultsEL = myXMLTest.getElementsByTagNameNS('opensearch', 'totalResults');
 

Столкнулся с той же проблемой.
Решение очень простое, достаточно было заглянуть в консоль, и посмотреть атрибуты track.childNodes[1]
Вместо .nodeValue надо было запрашивать .textContent
Вот такие пироги...