Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.12.2012, 11:06
Новичок на форуме
Отправить личное сообщение для teanrus Посмотреть профиль Найти все сообщения от teanrus
 
Регистрация: 16.12.2012
Сообщений: 4

парсинг xml с сайта используя js
мне дали задание написать гаджет рабочего стола для win 7, который бы отображал погодные данные с метеостанции нашей организации. На сервере я сделал скрипт который генерирует мне xml со следующим содержанием:

<?xml version="1.0" encoding="utf-8"?>
<weather>
<day name="day">14</day>
<month name="month">12</month>
<year name="year">2012</year>
<hour name="hour">11</hour>
<minute name="minute">26</minute>
<temp name="temperature">-20.0</temp>
<wind name="wind">3.3</wind>
<maxwind name="maxwind">5.2</maxwind>
</weather>

Вопрос:
как при помощи js парсить данный файл
p.s. я не очень-то владею js к сожалению.
Ответить с цитированием
  #2 (permalink)  
Старый 16.12.2012, 12:25
Аватар для cib
cib cib вне форума
Интересующийся
Отправить личное сообщение для cib Посмотреть профиль Найти все сообщения от cib
 
Регистрация: 11.12.2012
Сообщений: 16

Есть очень простой вариант с использованием jQuery.parseXML, но он Вам вряд ли подойдет.
Попробуйте так:

function parseXML() {
  var doc = new ActiveXObject(‘Microsoft.XMLDOM’);
  doc.loadXML(str);
  return doc;
}


Далее с doc работаете как с обычным DOM Element, например,

var _day = doc.getElementsByTagName('day').text();
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2012, 07:23
Новичок на форуме
Отправить личное сообщение для teanrus Посмотреть профиль Найти все сообщения от teanrus
 
Регистрация: 16.12.2012
Сообщений: 4

Сделал вот так:
на стороне сервера weather_save.php:
<?php

// Соединение с бд
$link = mysql_connect('host', 'user', 'pass');
mysql_select_db('name_db');

// выборка погодных данных
$result = mysql_query("SELECT id, wind, temp, maxwind, (date_format(date, '%H')) AS H, (date_format(date, '%i')) AS i, (date_format(date, '%d')) AS d, (date_format(date, '%m')) AS m, (date_format(date, '%Y')) AS y FROM name_table ORDER BY id DESC LIMIT 1");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
	$id = $row[0];
	$w = $row[1];
	$t = $row[2];
	$mw = $row[3];
	$h = $row[4];
	$i = $row[5];
	$d = $row[6];
	$m = $row[7];
	$y = $row[8];

//Создаем XML файл
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
$weather = $doc->createElement('weather');// корневой элемент для XML документа
$doc->appendChild($weather);
$day = $doc->createElement('day',$d);// дочерний элемент, его значение
$weather->appendChild($day);
$date_att = $doc->createAttribute('name');// атрибут
$day->appendChild($date_att);
$att_text = $doc->createTextNode('day');// значение атрибута
$date_att->appendChild($att_text);
$month = $doc->createElement('month',$m);
$weather->appendChild($month);
$month_att = $doc->createAttribute('name');
$month->appendChild($month_att);
$att_text = $doc->createTextNode('month');
$month_att->appendChild($att_text);
$year = $doc->createElement('year',$y);
$weather->appendChild($year);
$year_att = $doc->createAttribute('name');
$year->appendChild($year_att);
$att_text = $doc->createTextNode('year');
$year_att->appendChild($att_text);
$hour = $doc->createElement('hour',$h);
$weather->appendChild($hour);
$hour_att = $doc->createAttribute('name');
$hour->appendChild($hour_att);
$att_text = $doc->createTextNode('hour');
$hour_att->appendChild($att_text);
$minute = $doc->createElement('minute',$i);
$weather->appendChild($minute);
$minute_att = $doc->createAttribute('name');
$minute->appendChild($minute_att);
$att_text = $doc->createTextNode('minute');
$minute_att->appendChild($att_text);
$temp = $doc->createElement('temp',$t);
$weather->appendChild($temp);
$temp_att = $doc->createAttribute('name');
$temp->appendChild($temp_att);
$att_text = $doc->createTextNode('temperature');
$temp_att->appendChild($att_text);
$wind = $doc->createElement('wind',$w);
$weather->appendChild($wind);
$wind_att = $doc->createAttribute('name');
$wind->appendChild($wind_att);
$att_text = $doc->createTextNode('wind');
$wind_att->appendChild($att_text);
$maxwind = $doc->createElement('maxwind',$mw);
$weather->appendChild($maxwind);
$maxwind_att = $doc->createAttribute('name');
$maxwind->appendChild($maxwind_att);
$att_text = $doc->createTextNode('maxwind');
$maxwind_att->appendChild($att_text);
$doc->save("weather.xml");

}
mysql_query($query, $link);
	mysql_close($link);
    }

?>


Далее там же на сервере weather.js:

var script = document.createElement('script');
script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js';
document.getElementsByTagName('head')[0].appendChild(script);
alert('script loaded');

$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "weather.xml",
        dataType: "xml",
        success: xmlParser
    });
});


function xmlParser(xml) { 
    $('#load').fadeOut();
    $(xml).find("weather").each(function () {
        $(".main").append('<div class="day">' + $(this).find("day").text() + '</div><div class="month">' + $(this).find("month").text() + '</div><div class="year"> ' + $(this).find("year").text() + '</div>');
        $(".weather").fadeIn(3000);
    });
}


На стороне клиента вот такой html:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Weather Gadget by labitnangi-uo.ru</title>
<script type="text/javascript" src="http://server.ru/weather.js"></script>
<link rel="stylesheet" href="css/main.css" type="text/css" />
</head>
<body class="body">
<g:background id="background" style="position:absolute;z-index:-1;top:0;left:0;" opacity="0"></g:background>
<div id="gadgetContent">
<div class="main"></div>
</div>
</body>
</html>


Вопрос:
  1. На сервере файл .xml создается, но нужно, чтобы он перезаписывался с периодичностью в 5 минут
  2. Ни каких видимых ошибок со стороны клиента не наблюдается, как и никаких результатов

Подскажите плиз, что не так?
Ответить с цитированием
  #4 (permalink)  
Старый 18.12.2012, 07:51
Новичок на форуме
Отправить личное сообщение для teanrus Посмотреть профиль Найти все сообщения от teanrus
 
Регистрация: 16.12.2012
Сообщений: 4

p.s.
Может быть есть какой нибудь более удобный способ парсинга?
Буду рад любому способу.
Ответить с цитированием
  #5 (permalink)  
Старый 18.12.2012, 08:12
Профессор
Посмотреть профиль Найти все сообщения от godofjavascript
 
Регистрация: 11.12.2012
Сообщений: 265



The following will parse an XML string into an XML document in all major browsers, including Internet Explorer 6. Once you have that, you can use the usual DOM traversal methods/properties such as childNodes and getElementsByTagName() to get the nodes you want.

var parseXml;

if (typeof window.DOMParser != "undefined") {
    parseXml = function(xmlStr) {
        return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
    };
} else if (typeof window.ActiveXObject != "undefined" &&
       new window.ActiveXObject("Microsoft.XMLDOM")) {
    parseXml = function(xmlStr) {
        var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlStr);
        return xmlDoc;
    };
} else {
    throw new Error("No XML parser found");
}

Example usage:

var xml = parseXml("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);

If you're using jQuery, from version 1.5 you can use its built-in parseXML() method.

var xml = $.parseXML("<foo>Stuff</foo>");
alert(xml.documentElement.nodeName);



Последний раз редактировалось godofjavascript, 18.12.2012 в 08:14.
Ответить с цитированием
  #6 (permalink)  
Старый 18.12.2012, 13:36
Новичок на форуме
Отправить личное сообщение для teanrus Посмотреть профиль Найти все сообщения от teanrus
 
Регистрация: 16.12.2012
Сообщений: 4

Thank you, now try
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбор чужего сайта средствами JS Vit Общие вопросы Javascript 3 05.02.2012 10:52
Парсинг XML в IE eternal AJAX и COMET 1 20.11.2011 01:25
Передача xml файла в js не через HTTP. prowoke Общие вопросы Javascript 9 30.06.2011 02:36
JS, RDFa, DOM, XML - Help! О_о Djumpen Общие вопросы Javascript 5 18.11.2010 19:37
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36