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

Nikitos* 24.01.2009 22:43

Вопрос по XML
 
Файлик xml с курсами от ЦБРФ выглядит так :
...
<Record Date="21.01.2009" Id="R01235">
<Nominal>1</Nominal>
<Value>33,4154</Value>
</Record>
...

Значение поля VALUE беру так :
var С = xmldoc.getElementsByTagName('Value').item(4);
var Cc =(course1.firstChild.data);

Как вытащить значение даты 21.01.2009 ?

Kolyaj 24.01.2009 22:44

getAttribute()

Nikitos* 24.01.2009 23:22

Спасибо !

Nikitos* 12.02.2009 19:19

Еще вопрос, как можно вытщащить значение из тега <Value> зная значение атрибута Id в теге <Record> ?

P.S. Просто из XML ЦБРФ можно тянуть валюту по номеру тега, структура файла неменяется. А файл Банка Украины постоянно меняется, надо тянуть по коду валюты.

Андрей Параничев 12.02.2009 19:24

xmldoc.getElementById("R01235").getElementsByTagName("Value").item(0).data

?

Nikitos* 12.02.2009 19:36

Спасибо, сажусь писать код :)

Nikitos* 17.02.2009 11:56

Еще вопрос, структура файла вот такая:

<item>
<date>2008-12-19</date>
<code>036</code>
<char3>AUD</char3>
<size>100</size>
<name>австралийских доларов</name>
<rate>555.3728</rate>
<change>15.1841</change>
</item>
<item>
...
</item>

Как вытащить значение тега <rate> зная значение <char3> ? (Кол-во тегов <item> в файле множество, соответственно и искать надо по всему файлу.)

Или можно наверное проще, подскажите просто как определить номер тега <char3> в файле зная его значение ? Дальше все будет понятно.

hogart 17.02.2009 12:58

а интересно, XPath в каком-либо виде поддерживается где-то еще, кроме Gecko?

IIIEPJIOK 17.02.2009 19:15

Цитата:

а интересно, XPath в каком-либо виде поддерживается где-то еще, кроме Gecko?
IE, Opera 9.63 (Opera 9.21 нет) , GoogleCrome, Safari
ЗЫ
У IE, конечно свой путь :)

Gvozd 17.02.2009 19:50

все что можно сделать с XPath, можно и без него.
это всего шиш оченб удобная и краткая абстракция.
хотя для меня по работе очень нужная )))

по моему в jQuery есть возможность делать выборки через XPath.
но кажется только для страницы
если вы готовы ради этой возможности подключить его, то дерзайте.

попробуйте на сервере ПЫХом сделать.думаю удобней будет.
ЗЫ а как вы работаете с чужим XML-ем?скачиваете предварительно?или как?

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

Nikitos* 18.02.2009 14:42

Ну вот именно этой строки я и ждал :

'/chapter/item/rate[preceding-sibling::char3="AUD"]'

Спасибо ! Я ведь только учусь, а без примеров совсем трудно получается ...


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