1. Program akwizycji danych z magistrali 1-wire generuje plik last.xml poniższej postaci:
Dla uproszczenia zamiesczono jedynie dwa elementy <SENSOR> </SENSOR> o numerach identyfikacyjnych postaci ROMID="F3000001B293E028".
<?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<code=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>
2. 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> </tr> </thead> <tr> </tr> </table> <!-- End tabela pomiaru --> <!-- Begin Piwnica_CO --> <table id="thetable8"> <tr> </tr> </table> <!-- End Piwnica_CO --> <!-- Begin Piwnica_SERWERY --> <table id="thetable9"> <tr> </tr> </table> <!-- End Piwnica_SERWERY --> <!-- Begin Piwnica_SYPIALNIA --> <table id="thetable10"> <tr> </tr> </table> <!-- End Piwnica_SYPIALNIA --> <!-- Begin Piwnica_WEJSCIE --> <table id="thetable11"> <tr> <code=java> </tr> </table> <!-- End Piwnica_WEJSCIE --> <!-- Begin Temp_ZEWN --> <table id="thetable12"> <tr> </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>
Dla 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?