JavaScript « Работа с 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>
<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
Вот такие пироги...