2010-04-20 4 views
3

У меня есть XML:Получить значение переменной из XML в JavaScript. Чистый путь

<point> 
    ... 
    <longitude>34.123123</longitude> 
</point> 
<point> 
    ... 
    <longitude>11.12534534</longitude> 
</point> 
<point> 
    ... 
    <longitude>32.567653</longitude> 
</point> 
<point> 
    ... 
    <longitude>33.345345</longitude> 
</point> 
... 

Задача:

получить значения <longitude> в JavaScript (в переменной).

Какой чистейший путь?

Возможно ли это без XSLT (без создания фиктивных элементов)?


Update:

Я очень плохо объяснил.

XML динамически формируется на сервере, затем в том же месте проходит XSLT и получается HTML, который отправляется в браузере.

Возможно, в HTML необходимо создать фиктивный элемент, в котором нужно записать значение долготы, а затем прочитать его значение в javascript из элемента на странице.

Как можно сделать по-другому?

+0

Используете ли вы какие-либо фреймворки javascript или это не опция? –

+0

@Nick Craver, просто чистый javascript. – Kalinin

+3

Является ли XML в строке или отдельном файле? –

ответ

2

Выполнение вызова AJAX в источник XML может помочь вам. Но это зависит от того, где вы храните XML-документ.

Проверьте следующую ссылку, особенно XMLHttpRequest часть:

http://www.w3schools.com/ajax/default.asp

4

Как о JQuery?

$.ajax({ 
    type: "GET", 
    url: "relative/path/to/yourfile.xml", 
    dataType: "xml", 
    success: function(xml) { 
    $(xml).find('point').each(function(){ 
     var longitude = $(this).find('longitude').text() 

     // doing something with your longitude variable 
    }); 
    } 
}); 
2

Используйте XML parser, если у вас есть строка. Если это файл, AJAX должен выполнить синтаксический анализ для вас. Вот пример: http://jsfiddle.net/Jr5ga/

/** 
* Parse XML from string 
* Abstract away browser differences 
*/ 
​function parseXML(text) { 
    if (window.DOMParser) { 
     parser = new DOMParser(); 
     doc = parser.parseFromString(text,"text/xml"); 
    } 
    else { // Internet Explorer 
     doc = new ActiveXObject("Microsoft.XMLDOM"); 
     doc.async="false"; 
     doc.loadXML(text); 
    } 
    return doc; 
} 

Чтобы получить значение долготы из этого XML-документа, вы можете использовать функцию getElementsByTagName. Как только все узлы долготы будут выбраны, проведите через них и получите текстовое содержимое в каждом узле, вызовите childNodes[0], так как он имеет только 1 дочерний элемент - текстовый узел и вызывает на текстовом узле nodeValue, чтобы получить значение в виде строки.

var xml = parseXML(string); 

var longitudes = xml.getElementsByTagName("longitude"); 
var result = []; 

for(var i = 0; i < longitudes.length; i++) { 
    // add longitude value to "result" array 
    result.push(longitudes[i].childNodes[0].nodeValue); 
} 
+0

@ Анураг, я так понимаю, что предложенный вариант не подходит, потому что я плохо объяснил проблему. Для реализации вашего решения нужна строка, и она у меня нет (ее нужно получить с сервера). Ваш прием мне очень понравился, я его запомню, и я буду применять в дальнейшем для разбора XML. – Kalinin

Смежные вопросы