Что нового

Как получить значение с xml файла.

windows

Новичок
Сообщения
15
Репутация
0
Помогите сделать некий чекер, который бы проверял определенное значение в xml файле и выводил это значение, если оно больше , например 1000.
Мои начинания
Код:
#include <_XMLDomWrapper.au3>
#include <Array.au3>
Do
_XMLFileOpen ("http://wm-privat.com/export.xml")
$str = "//rates/item/amount"
$res = _XMLGetValue($str)
MsgBox(0,"",$res)
Sleep (5000)
Until 0

Все бы хорошо, но в данном xml для одного тега присваюются много значений, а нужно получить определенное
Из этого
<item>
<from>
P24UAH
</from>
<to>
WMR
</to>
<in>
1
</in>
<out>
4.065
</out>
<amount>
39.64
</amount>

</item>
Нужно получить значение из выделенного <amount></amount>
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
windows [?]
Нужно получить значение из выделенного <amount></amount>
Код:
#include <_XMLDomWrapper.au3>

If _XMLFileOpen ("http://wm-privat.com/export.xml") Then
	$aValue = _XMLGetValue('.//item[from="P24UAH" and to="WMR"]/amount')
	MsgBox(64, @ScriptName, $aValue[1])
EndIf
 
Автор
W

windows

Новичок
Сообщения
15
Репутация
0
Cпасибо! Значение получает.
Решил немного изменить скрипт, чтобы если значение
Код:
$aValue
больше 1000, то проигрывался звук с файла finish.mp3, если нет то показывает сообщение.
Код:
#include <_XMLDomWrapper.au3>
_XMLFileOpen ("http://wm-privat.com/export.xml")
$aValue = _XMLGetValue('.//item[from="P24UAH" and to="WMR"]/amount')
If $aValue > 1000 Then
FileOpen("finish.mp3", 0)
Else
MsgBox(64, @ScriptName, $aValue[1])
EndIf

Проблема, не проверяет значение, а сразу выполняет Else, и проигрывать файл mp3 тоже не хочет. В чем ошибка?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
windows [?]
Внимательно читаем Return Value(s)!
Код:
;===============================================================================
; Function Name: 	_XMLGetValue
; Description:		Get XML values based on XPath input from root node.
; Parameter(s): 	$strXPath - xml tree path from root node (root/child/child..)
; Syntax: 			_XMLGetValue($strXPath)
; Author(s): 		Stephen Podhajecki <[email protected]>
; Return Value(s):	On Success  An array of fields text values(count is in first element)
;					On Failure -1 set 
;						@Error = 1 
;					@Extended to:
;						0 = No matching node
;						1 = No object passed
;===============================================================================

Внимательно смотрите свой код, и... Что вы сравниваете?
Код:
If $aValue > 1000 Then
 
Автор
W

windows

Новичок
Сообщения
15
Репутация
0
Спасибо! Теперь условие выполняется!
Возможно ли еще с помощью MsgBox, выводить окно, в котором бы обновлялась информация, через заданый интервал, без нажатия кнопки "ОК" или лучше использовать другую функцию?
 
Автор
W

windows

Новичок
Сообщения
15
Репутация
0
Использовал
Код:
SplashTextOn
, работает. Спасибо всем за помощь!
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
windows [?]
Цитата
Спасибо! Теперь условие выполняется!
Я дико извиняюсь, а что у вас выполняется??? ;D
Вы явно не читали мой пост внимательно! Ваш код как не работал, так и не работает. Вы пытаетесь сравнить "красное" с "круглым", а именно: массив с числом!!! И хоть Number, хоть Int напишите, условие работать не будет, потому как ноль всегда меньше тысячи ;D
Код:
#include <_XMLDomWrapper.au3>
_XMLFileOpen ("http://wm-privat.com/export.xml")
_Check(_XMLGetValue('.//item[from="WMZ" and to="P24UAH"]/amount'))
_Check(_XMLGetValue('.//item[from="P24UAH" and to="WMR"]/amount'))

Func _Check($a_Value)
	If $a_Value[1] > 1000 Then
		MsgBox(64, $a_Value[1] & ' > 1000 = Да', $a_Value[1])
	Else
		MsgBox(64, $a_Value[1] & ' > 1000 = Нет', $a_Value[1])
	EndIf
EndFunc ;=> _Check
 
Автор
W

windows

Новичок
Сообщения
15
Репутация
0
Как раз таки работает. Получился такой код
Код:
#NoTrayIcon
#include <_XMLDomWrapper.au3>
While 1
_XMLFileOpen ("http://wm-privat.com/export.xml")
$aValue = _XMLGetValue('.//item[from="P24UAH" and to="WMR"]/amount')
$num = Number($aValue[1])
If $num > 1000 Then
SplashTextOn("Резерв Норм!", $aValue[1], 150, 50, 1120, 50, 0+16+32, "MisterEarl BT", 26)
Sleep(10000)
Else
SplashTextOn("Резерв", $aValue[1], 150, 50, 1120, 50, 0+16+32, "", 20)
Sleep(5000)
EndIf
Sleep(5000)
WEnd
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
windows [?]
Как раз таки работает

Разница есть? :smile:

C2H5OH [?]



Добавлено:
Сообщение автоматически объединено:

В случае с
Код:
$aValue[1]
функция Number не обязательна.
 
Верх