- Program akwizycji danych z magistrali 1-wire generuje plik last.xml poniższej postaci:
<?xm</TEMPERATURES>
</DATA>l version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/css" href="last.css" ?>
<DATA>
<PROGRAM NAME="LogTemp">
<VERSION>2.25.0.97</VERSION>
<TIMEZONE
```java
_BIAS_UTC>+0100</TIMEZONE_BIAS_UTC>
</PROGRAM>
<TEMPERATURES>
<SENSOR ROMID="48000001B0584628">
<NAME>Parter_JADALNIA</NAME>
<VALUE>18.00</VALUE>
<DATE>
<YEAR>2012</YEAR>
<MONTH>11</MONTH>
<DAY>24</DAY>
</DATE>
<TIME>
<HOUR>6</HOUR>
<MIN>41</MIN>
<SEC>30</SEC>
</TIME>
<AVERAGE>18.20</AVERAGE>
</SENSOR>
<SENSOR ROMID="8A00000165D7AC28">
<NAME>Parter_SRODEK</NAME>
<VALUE>21.50</VALUE>
<DATE>
<YEAR>2012</YEAR>
<MONTH>11</MONTH>
<DAY>24</DAY>
</DATE>
<TIME>
<HOUR>6</HOUR>
<MIN>41</MIN>
<SEC>28</SEC>
</TIME>
<AVERAGE>21.63</AVERAGE>
</SENSOR>
</TEMPERATURES>
</DATA>
Dla uproszczenia zamiesczono jedynie dwa elementy <SENSOR> </SENSOR> o numerach identyfikacyjnych postaci ROMID="F3000001B293E028".
- Poniższy JAVA skrypt
<!-- Begin piwnica script -->
var xmlDoc
window.onload=function(){
// code for IE
if(window.ActiveXObject) {
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load('last.xml');
getTable()
}
// code for Firefox
else {
if(document.implementation &&document.implementation.createDocument)
try{//--- this is for FF, opera and others.
xmlDoc= document.implementation.createDocument("","",null);
xmlDoc.load('last.xml');
xmlDoc.onload=getTable;
}
catch(e){// if the other one fails enters here for Safari
xmlDoc = new XMLHttpRequest();
xmlDoc.open("GET", 'last.xml', false);
xmlDoc.send();
xmlDoc=xmlDoc.responseXML;
parsearXML();
}
else {
alert('Your browser cannot handle this script');
}
}
}
function getTable(){
var nme=xmlDoc.getElementsByTagName("NAME");
var vle=xmlDoc.getElementsByTagName("VALUE");
var yea=xmlDoc.getElementsByTagName("YEAR");
var mth=xmlDoc.getElementsByTagName("MONTH");
var day=xmlDoc.getElementsByTagName("DAY");
var hor=xmlDoc.getElementsByTagName("HOUR");
var min=xmlDoc.getElementsByTagName("MIN");
var sec=xmlDoc.getElementsByTagName("SEC");
var aver=xmlDoc.getElementsByTagName("AVERAGE");
for(c=0;c<nme.length;c++) {
document.getElementById("nme").innerHTML+='<div class="box1">'+nme[c].firstChild.nodeValue+'<\/div>';
document.getElementById("vle").innerHTML+='<div class="box1">'+vle[c].firstChild.nodeValue+'<\/div>';
document.getElementById("yea").innerHTML+='<div class="box1">'+yea[c].firstChild.nodeValue+'/'+mth[c].firstChild.nodeValue+'/'+day[c].firstChild.nodeValue+'<\/div>';
document.getElementById("time").innerHTML+='<div class="box1">'+hor[c].firstChild.nodeValue+':'+min[c].firstChild.nodeValue+':' +sec[c].firstChild.nodeValue+'<\/div>';
document.getElementById("aver").innerHTML+='<div class="box1">'+aver[c].firstChild.nodeValue+'<\/div>';
}
// Piwnica_CO
document.getElementById("vle8").innerHTML+='<div class="box2">'+vle[7].firstChild.nodeValue+'<\/div>';
// Piwnica_SERWERY
document.getElementById("vle9").innerHTML+='<div class="box2">'+vle[8].firstChild.nodeValue+'<\/div>';
// Piwnica_SYPIALNIA
document.getElementById("vle10").innerHTML+='<div class="box2">'+vle[9].firstChild.nodeValue+'<\/div>';
// Piwnica_WEJSCIE
document.getElementById("vle11").innerHTML+='<div class="box2">'+vle[10].firstChild.nodeValue+'<\/div>';
// Temp_ ZEWN
document.getElementById("vle12").innerHTML+='<div class="box2">'+vle[11].firstChild.nodeValue+'<\/div>';
}
<!-- End tabel script -->
wypisuje na stronie html poszczególne elementy w tabeli oraz generuje jedno-elementowe tabele z wartościami pomiarow na rzucie kondygnacji w miejscach dokonywania pomiarów.
za to odpowiada niniejszy fragment kodu html:
<!-- Begin tabela pomiaru -->
<table id="thetable">
<thead>
<tr>
<th>Name</th>
<th>[°C]</th>
<th>rrrr/mm/dd</th>
<th>Time</th>
<th>Avr.[°C]</th>
</tr>
</thead>
<tr>
<td id="nme"></td>
<td id="vle"></td>
<td id="yea"></td>
<td id="time"></td>
<td id="aver"></td>
</tr>
</table>
<!-- End tabela pomiaru -->
<!-- Begin Piwnica_CO -->
<table id="thetable8">
<tr>
<td id="vle8"></td>
</tr>
</table>
<!-- End Piwnica_CO -->
<!-- Begin Piwnica_SERWERY -->
<table id="thetable9">
<tr>
<td id="vle9"></td>
</tr>
</table>
<!-- End Piwnica_SERWERY -->
<!-- Begin Piwnica_SYPIALNIA -->
<table id="thetable10">
<tr>
<td id="vle10"></td>
</tr>
</table>
<!-- End Piwnica_SYPIALNIA -->
<!-- Begin Piwnica_WEJSCIE -->
<table id="thetable11">
<tr>
<td id="vle11"></td>ostać plik last.xml :
```java
</tr>
</table>
<!-- End Piwnica_WEJSCIE -->
<!-- Begin Temp_ZEWN -->
<table id="thetable12">
<tr>
<td id="vle12"></td>
</tr>
</table>
<!-- End Temp_ZEWN -->
I wszystko było by OK! gdynie nie to, że to jest bardzo ograniczona postać pliku xml.
Po rozserzeniu elemenu pliku <TEMPERATURES> </TEMPERATURES> do poniższej postaci:
3. Rozszerzona postać plik last.xml :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/pomiary.xsl" ?>
<DATA>
<PROGRAM NAME="LogTemp">
<VERSION>2.25.0.97</VERSION>
<TIMEZONE_BIAS_UTC>+0100</TIMEZONE_BIAS_UTC>
</PROGRAM>
<ALARMS>
<TEMPERATURES>
</TEMPERATURES>
</ALARMS>
<TEMPERATURES>
<SENSOR ROMID="48000001B0584628">
<NAME>Parter_JADALNIA</NAME>
<VALUE>17.50</VALUE>
<DATE>
<YEAR>2013</YEAR>
<MONTH>2</MONTH>
<DAY>3</DAY>
</DATE>
<TIME>
<HOUR>16</HOUR>
<MIN>56</MIN>
<SEC>30</SEC>
</TIME>
<AVERAGE>16.18</AVERAGE>19.50
<MINH24>
<VALUE>14.50</VALUE>
<DATE>
<YEAR>2013</YEAR>
<MONTH>2</MONTH>
<DAY>3</DAY>
</DATE>
<TIME>
<HOUR>2</HOUR>
<MIN>43</MIN>
<SEC>43</SEC>
</TIME>
</MINH24>
<MAXH24>
<VALUE>17.50</VALUE>
<DATE>
<YEAR>2013</YEAR>
<MONTH>2</MONTH>
<DAY>3</DAY>
</DATE>
<TIME>
<HOUR>16</HOUR>
<MIN>56</MIN>
<SEC>30</SEC>
</TIME>
</MAXH24>
<MIN>
<VALUE>14.00</VALUE>
<DATE>
<YEAR>2013</YEAR>
<MONTH>1</MONTH>
<DAY>22</DAY>
</DATE>
<TIME>
<HOUR>22</HOUR>
<MIN>8</MIN>
<SEC>34</SEC>
</TIME>
</MIN>
<MAX>
<VALUE>19.00</VALUE>
<DATE>
<YEAR>2013</YEAR>
<MONTH>1</MONTH>
<DAY>8</DAY>
</DATE>
<TIME>
<HOUR>22</HOUR>
<MIN>37</MIN>
<SEC>54</SEC>
</TIME>
</MAX>
<ALARMS/>
<UNITS>Celsius</UNITS>
<TYPE>DS18B20</TYPE>
<CONFIG/>
</SENSOR>
</TEMPERATURES>
</DATA>
Dl uproszczenia, ze względu na rozwlekłość, plik zawiera tylko jeden element <SENSOR ROMID="48000001B0584628">.
Jak widać w pliku danych xml dochodzi do zagnieżdżenia elementów potomnych typu <DAY></DAY>, <VALUE></VALUE>,<HOUR></HOUR>,<MIN>43</MIN>,<SEC>43</SEC>, w wyniku czego skrypt generuje błędne wyniki. Co zrobić, żeby skrypt po przeczytaniu poniższego fragmentu
<NAME>Parter_JADALNIA</NAME>
<VALUE>17.50</VALUE>
<DATE>
<YEAR>2013</YEAR>
<MONTH>2</MONTH>
<DAY>3</DAY>
</DATE>
<TIME>
<HOUR>16</HOUR>
<MIN>56</MIN>
<SEC>30</SEC>
</TIME>
<AVERAGE>16.18</AVERAGE>19.50
zignorował wczytywanie pozostałych elementów potomnych o tych samych nazwach?