Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   javascript, sql, xml (https://javascript.ru/forum/misc/20902-javascript-sql-xml.html)

Asbrand 22.08.2011 12:53

javascript, sql, xml
 
Всем доброго дня.
Имеется задача такого плана... есть база sql в одном из столбцов которой лежат данные типа xml и вида
<response SPXML-FORM="x-local:response.xmd"> <label>some text</label>
<custom_elems>
<custom_elem>
<name> a</name> <text>4</text>
</custom_elems>
<custom_elem>
<name> b</name> <text>15</text>
</custom_elem>
</custom_elems>
</response>

и если подключиться к базе и получить данные из других столбцов легко, то как выковырять отсюда значения text в массив, я совсем не представляю. Буду крайне признателен за помощь

systemiv 22.08.2011 13:11

Я бы на Вашем месте пересмотрел структуру БД.
Пока кроме функции eval() в php ничего на ум не лезет.

Asbrand 22.08.2011 13:14

Структуру БД к моему великому сожалению поменять не могу, ибо проект остался от прошлого разработчика и меня посадили его дорабатывать. И да, разобрать надо именно javascript'ом Т_Т

-----------------------------------------------------------------------------

ок, делаю так
xml=new ActiveXObject ("Microsoft.XMLDOM");
xml.async=false;
xml.load(o1);
o2=xml.getElementsByTagName("custom_elem");

вот до сюда работает нормально, но как только я пытаюсь сделать
alert(o2[0]) мне пишет, что это не массив, а что тогда? О_о

ваый 22.08.2011 14:29

Javascript имеет нормальные возможности для работы с xml.
var str = '<response SPXML-FORM="x-local:response.xmd"><label>some text</label><custom_elems><custom_elem><name> a</name> <text>4</text></custom_elem><custom_elem><name> b</name> <text>15</text></custom_elem></custom_elems></response>';

var parser, xml;
if (window.DOMParser) {
    parser = new DOMParser();
    xml = parser.parseFromString(str, "text/xml");
}
else { // IE
    xml = new ActiveXObject("Microsoft.XMLDOM");
    xml.async = "false";
    xml.loadXML(str);
}

var nodes = xml.getElementsByTagName('text');

var i, l = nodes.length, items = [];
for (i = 0; i < l; i++) {
    items.push(nodes[i].childNodes[0].nodeValue);
}

alert(items.join());

Asbrand 22.08.2011 15:28

премного благодарен, работает

Solovei95 23.08.2011 16:38

Самый простой способ - XMLHttpRequest :D


Часовой пояс GMT +3, время: 09:08.