Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по XML (https://javascript.ru/forum/misc/2629-vopros-po-xml.html)

Nikitos* 17.02.2009 20:43

Товарищи, я совсем запутался. Про XPath почитал на предложенном сайте, но все равно не очень понял как осуществить задуманное.

XML тащу в сафари вот так :
var URL = "http://bank-ua.com/export/currrate.xml" + "?" + Math.random();
XML = false;
XML = new XMLHttpRequest();
XML.overrideMimeType('text/xml');
XML.open('GET', URL, true);
XML.send(null);


Кто-нибудь все-таки может написать строчечку кода как определить номер тега в файле зная его значение ?

IIIEPJIOK 17.02.2009 21:17

Цитата:

Про XPath почитал на предложенном сайте
про XPathEvaluator, дочитали
Елки...
Цитата:

var URL = "http://bank-ua.com/export/currrate.xml" + "?" + Math.random();
И что? Это работает?

Nikitos* 17.02.2009 22:25

Цитата:

Сообщение от IIIEPJIOK (Сообщение 12813)
про XPathEvaluator, дочитали
Елки...

И что? Это работает?

1. Дочитал, но я в этом не очень пока разбираюсь, без примера не справлюсь :(

2. Работает. Можете проверить например : http://bank-ua.com/export/currrate.xml?0.1313131313

IIIEPJIOK 17.02.2009 22:34

Цитата:

Работает. Можете проверить например
я даже не сомневался, что ссылка рабочая....
У вас ваш код работает?
var URL = "http://bank-ua.com/export/currrate.xml" + "?" + Math.random();
XML = false;
XML = new XMLHttpRequest();
XML.overrideMimeType('text/xml');
XML.open('GET', URL, true);
XML.send(null);

Ошибки, типа "Доступ запрещен" не выскакивает?

Nikitos* 18.02.2009 07:12

Работает, только в Сафари, в мозиле и в IE не пашет. Но так как этот код для айфона, меня устраивает. А что не должно работать или ошибка где вкралась ?

IIIEPJIOK 18.02.2009 10:41

Цитата:

А что не должно работать или ошибка где вкралась ?
Цитата:

Ограничения безопасности. Кросс-доменный XMLHttpRequest

Для ограничения XmlHttpRequest используется философия "Same Origin Policy". Она очень проста - каждый сайт в своей песочнице. Запрос можно делать только на адреса с тем же протоколом, доменом, портом, что и текущая страница.

Т.е, со страницы на адресе http://site.com нельзя сделать XmlHttpRequest на адрес https://site.com, http://site.com:81 или http://othersite.com
Продолжение....

Nikitos* 18.02.2009 10:54

Сафари видимо игнорирует эти ограничения. Я этим методом без проблем тяну данные с различных ресурсов и никаких проблем не возникает.
Тут лежит моя небольшая разработка под IPhone, ее можно запустить в Сафари и убедиться, что все работает без проблем.

Спасибо за ссылку, почитаю.

И все-таки, не поможете мне с моим вопросом ?

twolf 18.02.2009 12:42

помоему такую задачу надо решать серверным путем. XPath+php например.
Вы тогда сможете по крону запускать скрипты, которые будут получать xml файлы с другого(других) сайтов и всегда иметь свежий курс валют.

Nikitos* 18.02.2009 13:35

Похоже меня не слышат, и тема ушла совсем в другое русло ...
У меня нет проблемы с доставанием XML и с получением свежего курса.

Вот мой рабочий код, который работает безо всяких проблем :
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
</head>

<body onload="test();"> 


<script>

function test(){
            var URL = "http://bank-ua.com/export/currrate.xml" + "?" + Math.random();
	        XML = false;
                XML = new XMLHttpRequest();
                XML.overrideMimeType('text/xml');
                XML.open('GET', URL, true);
                XML.send(null);

    XML.onload= function() {

    if (XML.readyState == 4) {
       if (XML.status == 200) {

                var xmldoc = XML.responseXML;
                
		var V1 = "AUD"
		if (V1=="AUD"){tag1 = 0;}
		var course1 = xmldoc.getElementsByTagName('rate').item(tag1).firstChild.data;

		alert(course1);
		}}}}
</script>
</body>



Но меня перестал устраивать такой способ определения курса, потому, что сегодня валюта AUD находится в item[0], а завтра может оказаться в item[1] например.

Поэтому возник вопрос как в моей ситуации определить значение одного одного тега, зная значение другово.

IIIEPJIOK 18.02.2009 14:16

Дык, вам ответили XPath,вам дали ссылку, читайте...
Вам не создать объект?
var evaluator = new XPathEvaluator();

вам не создать Xpath - выражение?
Код:

'/chapter/item/rate[preceding-sibling::char3="AUD"]'
Вам не прочесть на MDC, какой метод выполняет это выражение?
evaluate()

Что вам не ясно?
Не хотите читать? Так, вам уже писали

Цитата:

все что можно сделать с XPath, можно и без него.
Циклом, перебирайте все item, и ищите у кого chapter3 равен вашему, когда найдете, читайте значение дочернего узла rate


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