LINUX.ORG.RU

Работа с XML

 ,


0

1

Возникла такая проблема, мне необходимо с помощью баша извлечь из имеющегося xml файла с погодой информацию

<PRESSURE max=«764» min=«763»/> <TEMPERATURE max=«18» min=«17»/> <WIND min=«4» max=«5» direction=«3»/>

И переделать ее во что то вроде

Давление: 763-764 Температура: 17-18 Скоростьи направление ветра: 4-5 В

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

Ответ на: комментарий от anonymous

да, это лабораторная, суть которой сделать скрипт, который будет каждый день в одно и то же время узнавать погоду, сохранять ее в отдельный файл и удалять старые ( 7дневной давности).

Heppymon
() автор топика

например xmlstarlet: xml sel -t -v <xpath>

anonymous
()
Ответ на: комментарий от Heppymon

Так не обязательно xml'ки то bash'ем разбирать (да и на «чистом» bash 99% что это не получится или кода будет на три экрана). Возми xmlstarlet.

alozovskoy ★★★★★
()
#!/bin/bash

get() {
	IFS='<' read -r -d '>' -t 5 DOM_CONTENT DOM_ENTITY
}

main() {
	while get; do
		read tag args <<< "$DOM_ENTITY"
		eval local $args

		if [ "$tag" = "TEMPERATURE" ]; then
			echo Температура: $min тире $max градусов
		fi

		if [ "$tag" = "WIND" ]; then
			echo Ветер: $min тире $max м/с направления $direction хз какого
		fi
	done
}

main "$@"
# echo "<PRESSURE max="764" min="763"/> <TEMPERATURE max="18" min="17"/> <WIND min="4" max="5" direction="3"/>" > xml_data.txt
# chmod +x xml_parse.sh
# ./xml_parse.sh < xml_data.txt

Прошу заплатить мне 100 рублей на Яндекс.Деньги: 410011384132283 за проделанную работу, поскольку я выполнил лабораторную работу целиком вместо вас, таким образом повлияв на успешное будущее вашей карьеры.

Spoofing ★★★★★
()

убейся

libxml
/thread

mos ★★☆☆☆
()
Ответ на: комментарий от Spoofing

я безусловно тебе благодарен, и даже готов скинуть тебе 100 рублей если ты действительно сделаешь мне всю работу: Мне нужен скрипт написанный на баше, который будет каждый день, в одно и то же время, узнавать прогноз погоды и сохранять его в файл формата тхт, а так же удалять старые файлы (7 дней давности).

Из всей работы то мне необходимо сделать, я пока что решил проблему лишь с получением информации в xml формате вот ссылка http://xml.meteoservice.ru/export/gismeteo/point/135.xml

Heppymon
() автор топика
Ответ на: комментарий от Heppymon

Сайт выдаёт переменную weekday, день недели. То есть, данных больше чем за последние 7 дней у тебя попросту не будет. Поэтому удалять ничего не нужно.

В запускаешь скрипт и он работает в цикле, спит, когда наступает 12:00, получает инфу и записывает её в текстовый файл с номером дня недели, на который предназначена погода.

Циферки, которые обозначают направление ветра, я не знаю какие бывают — нужно их расшифровать внутри case, это не трудно, надо только узнать их значения.

#!/bin/bash

get() {
	IFS='<' read -r -d '>' DOM_CONTENT DOM_ENTITY
}

main() {
	while get; do
		read tag args <<< "${DOM_ENTITY%%\/*}"
		eval local $args

		if [ "$tag" = "PRESSURE" ]; then
			local _pres="Давление $min - $max мм рт. ст."
		fi

		if [ "$tag" = "TEMPERATURE" ]; then
			local _temp="Температура $min - $max °C"
		fi

		if [ "$tag" = "WIND" ]; then
			case "$direction" in
				"1") direction="северный";;
				"2") direction="восточный";;
				"3") direction="западный";;
				"4") direction="южный";;
				*) direction="хз какой";;
			esac

			local _wind="Ветер $direction $min - $max м/с"
		fi
	done

	echo -n > $weekday.txt

	echo $_pres >> $weekday.txt
	echo $_temp >> $weekday.txt
	echo $_wind >> $weekday.txt
}

while sleep 60; do
	if [ `date +%H:%M` = "12:00" ]; then
		curl -s "http://xml.meteoservice.ru/export/gismeteo/point/135.xml" | main "$@" > /dev/null
	fi
done
Spoofing ★★★★★
()
Ответ на: комментарий от Heppymon

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

Spoofing ★★★★★
()
Ответ на: комментарий от Spoofing

100 этотслишком мало. И вообще давно бы шёл за ленивые жопы решать за деньги. У тебя же и соображалка пашет и усидчивость и время есть.

dk-
()
Ответ на: комментарий от Heppymon

Судя по сабжу это не главная твоя проблема;)

dk-
()
Ответ на: комментарий от Heppymon

curl установлен?

забудь пока про таймер, сделай просто curl -s "http://xml.meteoservice.ru/export/gismeteo/point/135.xml" | main "$@" > /dev/null в конце.

что ты делаешь чтобы его запустить и что оно выдаёт вообще?

Spoofing ★★★★★
()
Ответ на: комментарий от Spoofing

я пошел немного по другому пути и написал кое что сам

wget -q -O ~/Рабочий\ стол/PP/info.xml http://xml.meteoservice.ru/export/gismeteo/point/135.xml # сохраняем хмл файл

echo `grep TEMPERATURE ~/Рабочий\ стол/PP/info.xml` > ~/Рабочий\ стол/PP/info.txt

cut -b 30 ~/Рабочий\ стол/PP/info.txt

fi

здесь у меня проблема в том, что в итоговом файле сохраняется 4 раза температура,а желательно что бы была один, и не получается с помощью cut -b сократить побайтно

Heppymon
() автор топика
Ответ на: комментарий от Spoofing

переработал последнюю строку echo `grep TEMPERATURE ~/Рабочий\ стол/PP/info.xml` | cut -c 1-32 > ~/Рабочий\ стол/PP/info.txt

заработало

Heppymon
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.