W zasadzie to wątek powinien być w "Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript" ale jako, że raczkuję w tematyce pozwoliłem sobie zamieścić post w "przedszkolu"

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".

  1. <?xm</TEMPERATURES>
  2. </DATA>l version="1.0" encoding="UTF-8" standalone="yes"?>
  3. <?xml-stylesheet type="text/css" href="last.css" ?>
  4. <DATA>
  5. <PROGRAM NAME="LogTemp">
  6. <VERSION>2.25.0.97</VERSION>
  7. <TIMEZONE<code=java>_BIAS_UTC>+0100</TIMEZONE_BIAS_UTC>
  8. </PROGRAM>
  9. <TEMPERATURES>
  10. <SENSOR ROMID="48000001B0584628">
  11. <NAME>Parter_JADALNIA</NAME>
  12. <VALUE>18.00</VALUE>
  13. <DATE>
  14. <YEAR>2012</YEAR>
  15. <MONTH>11</MONTH>
  16. <DAY>24</DAY>
  17. </DATE>
  18. <TIME>
  19. <HOUR>6</HOUR>
  20. <MIN>41</MIN>
  21. <SEC>30</SEC>
  22. </TIME>
  23. <AVERAGE>18.20</AVERAGE>
  24. </SENSOR>
  25. <SENSOR ROMID="8A00000165D7AC28">
  26. <NAME>Parter_SRODEK</NAME>
  27. <VALUE>21.50</VALUE>
  28. <DATE>
  29. <YEAR>2012</YEAR>
  30. <MONTH>11</MONTH>
  31. <DAY>24</DAY>
  32. </DATE>
  33. <TIME>
  34. <HOUR>6</HOUR>
  35. <MIN>41</MIN>
  36. <SEC>28</SEC>
  37. </TIME>
  38. <AVERAGE>21.63</AVERAGE>
  39. </SENSOR>
  40. </TEMPERATURES>
  41. </DATA>


2. Poniższy JAVA skrypt
  1. <!-- Begin piwnica script -->
  2. var xmlDoc
  3. window.onload=function(){
  4. // code for IE
  5. if(window.ActiveXObject) {
  6. xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  7. xmlDoc.async=false;
  8. xmlDoc.load('last.xml');
  9. getTable()
  10. }
  11. // code for Firefox
  12. else {
  13. if(document.implementation &&document.implementation.createDocument)
  14. try{//--- this is for FF, opera and others.
  15. xmlDoc= document.implementation.createDocument("","",null);
  16. xmlDoc.load('last.xml');
  17. xmlDoc.onload=getTable;
  18. }
  19. catch(e){// if the other one fails enters here for Safari
  20. xmlDoc = new XMLHttpRequest();
  21. xmlDoc.open("GET", 'last.xml', false);
  22. xmlDoc.send();
  23. xmlDoc=xmlDoc.responseXML;
  24. parsearXML();
  25.  
  26. }
  27. else {
  28. alert('Your browser cannot handle this script');
  29.  
  30. }
  31. }
  32. }
  33.  
  34. function getTable(){
  35.  
  36. var nme=xmlDoc.getElementsByTagName("NAME");
  37. var vle=xmlDoc.getElementsByTagName("VALUE");
  38. var yea=xmlDoc.getElementsByTagName("YEAR");
  39. var mth=xmlDoc.getElementsByTagName("MONTH");
  40. var day=xmlDoc.getElementsByTagName("DAY");
  41. var hor=xmlDoc.getElementsByTagName("HOUR");
  42. var min=xmlDoc.getElementsByTagName("MIN");
  43. var sec=xmlDoc.getElementsByTagName("SEC");
  44. var aver=xmlDoc.getElementsByTagName("AVERAGE");
  45.  
  46.  
  47. for(c=0;c<nme.length;c++) {
  48. document.getElementById("nme").innerHTML+='<div class="box1">'+nme[c].firstChild.nodeValue+'<\/div>';
  49. document.getElementById("vle").innerHTML+='<div class="box1">'+vle[c].firstChild.nodeValue+'<\/div>';
  50.  
  51. document.getElementById("yea").innerHTML+='<div class="box1">'+yea[c].firstChild.nodeValue+'/'+mth[c].firstChild.nodeValue+'/'+day[c].firstChild.nodeValue+'<\/div>';
  52. document.getElementById("time").innerHTML+='<div class="box1">'+hor[c].firstChild.nodeValue+':'+min[c].firstChild.nodeValue+':' +sec[c].firstChild.nodeValue+'<\/div>';
  53. document.getElementById("aver").innerHTML+='<div class="box1">'+aver[c].firstChild.nodeValue+'<\/div>';
  54. }
  55.  
  56.  
  57. // Piwnica_CO
  58. document.getElementById("vle8").innerHTML+='<div class="box2">'+vle[7].firstChild.nodeValue+'<\/div>';
  59. // Piwnica_SERWERY
  60. document.getElementById("vle9").innerHTML+='<div class="box2">'+vle[8].firstChild.nodeValue+'<\/div>';
  61. // Piwnica_SYPIALNIA
  62. document.getElementById("vle10").innerHTML+='<div class="box2">'+vle[9].firstChild.nodeValue+'<\/div>';
  63. // Piwnica_WEJSCIE
  64. document.getElementById("vle11").innerHTML+='<div class="box2">'+vle[10].firstChild.nodeValue+'<\/div>';
  65.  
  66.  
  67. // Temp_ ZEWN
  68. document.getElementById("vle12").innerHTML+='<div class="box2">'+vle[11].firstChild.nodeValue+'<\/div>';
  69.  
  70. }
  71. <!-- End tabel script -->
  72.  


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:
  1. <!-- Begin tabela pomiaru -->
  2. <table id="thetable">
  3. <tr>
  4. <th>Name</th>
  5. <th>[°C]</th>
  6. <th>rrrr/mm/dd</th>
  7. <th>Time</th>
  8. <th>Avr.[°C]</th>
  9. </tr>
  10. <tr>
  11. <td id="nme"></td>
  12. <td id="vle"></td>
  13. <td id="yea"></td>
  14. <td id="time"></td>
  15. <td id="aver"></td>
  16. </tr>
  17.  
  18. <!-- End tabela pomiaru -->
  19.  
  20. <!-- Begin Piwnica_CO -->
  21. <table id="thetable8">
  22. <tr>
  23. <td id="vle8"></td>
  24. </tr>
  25. <!-- End Piwnica_CO -->
  26.  
  27. <!-- Begin Piwnica_SERWERY -->
  28. <table id="thetable9">
  29. <tr>
  30. <td id="vle9"></td>
  31. </tr>
  32. <!-- End Piwnica_SERWERY -->
  33.  
  34. <!-- Begin Piwnica_SYPIALNIA -->
  35. <table id="thetable10">
  36. <tr>
  37. <td id="vle10"></td>
  38. </tr>
  39. <!-- End Piwnica_SYPIALNIA -->
  40.  
  41. <!-- Begin Piwnica_WEJSCIE -->
  42. <table id="thetable11">
  43. <tr>
  44. <td id="vle11"></td>ostać plik last.xml :
  45. <code=java>
  46. </tr>
  47. <!-- End Piwnica_WEJSCIE -->
  48.  
  49. <!-- Begin Temp_ZEWN -->
  50. <table id="thetable12">
  51. <tr>
  52. <td id="vle12"></td>
  53. </tr>
  54. <!-- End Temp_ZEWN -->
  55.  


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 :
  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <?xml-stylesheet type="text/xsl" href="css/pomiary.xsl" ?>
  3. <DATA>
  4. <PROGRAM NAME="LogTemp">
  5. <VERSION>2.25.0.97</VERSION>
  6. <TIMEZONE_BIAS_UTC>+0100</TIMEZONE_BIAS_UTC>
  7. </PROGRAM>
  8.  
  9. <ALARMS>
  10. <TEMPERATURES>
  11. </TEMPERATURES>
  12. </ALARMS>
  13.  
  14. <TEMPERATURES>
  15. <SENSOR ROMID="48000001B0584628">
  16. <NAME>Parter_JADALNIA</NAME>
  17. <VALUE>17.50</VALUE>
  18. <DATE>
  19. <YEAR>2013</YEAR>
  20. <MONTH>2</MONTH>
  21. <DAY>3</DAY>
  22. </DATE>
  23. <TIME>
  24. <HOUR>16</HOUR>
  25. <MIN>56</MIN>
  26. <SEC>30</SEC>
  27. </TIME>
  28. <AVERAGE>16.18</AVERAGE>19.50
  29.  
  30. <MINH24>
  31. <VALUE>14.50</VALUE>
  32. <DATE>
  33. <YEAR>2013</YEAR>
  34. <MONTH>2</MONTH>
  35. <DAY>3</DAY>
  36. </DATE>
  37. <TIME>
  38. <HOUR>2</HOUR>
  39. <MIN>43</MIN>
  40. <SEC>43</SEC>
  41. </TIME>
  42. </MINH24>
  43.  
  44. <MAXH24>
  45. <VALUE>17.50</VALUE>
  46. <DATE>
  47. <YEAR>2013</YEAR>
  48. <MONTH>2</MONTH>
  49. <DAY>3</DAY>
  50. </DATE>
  51. <TIME>
  52. <HOUR>16</HOUR>
  53. <MIN>56</MIN>
  54. <SEC>30</SEC>
  55. </TIME>
  56. </MAXH24>
  57.  
  58. <MIN>
  59. <VALUE>14.00</VALUE>
  60. <DATE>
  61. <YEAR>2013</YEAR>
  62. <MONTH>1</MONTH>
  63. <DAY>22</DAY>
  64. </DATE>
  65. <TIME>
  66. <HOUR>22</HOUR>
  67. <MIN>8</MIN>
  68. <SEC>34</SEC>
  69. </TIME>
  70. </MIN>
  71.  
  72. <MAX>
  73. <VALUE>19.00</VALUE>
  74. <DATE>
  75. <YEAR>2013</YEAR>
  76. <MONTH>1</MONTH>
  77. <DAY>8</DAY>
  78. </DATE>
  79. <TIME>
  80. <HOUR>22</HOUR>
  81. <MIN>37</MIN>
  82. <SEC>54</SEC>
  83. </TIME>
  84. </MAX>
  85.  
  86. <ALARMS/>
  87. <UNITS>Celsius</UNITS>
  88. <TYPE>DS18B20</TYPE>
  89. <CONFIG/>
  90. </SENSOR>
  91. </TEMPERATURES>
  92. </DATA>
  93.  

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
  1. <NAME>Parter_JADALNIA</NAME>
  2. <VALUE>17.50</VALUE>
  3. <DATE>
  4. <YEAR>2013</YEAR>
  5. <MONTH>2</MONTH>
  6. <DAY>3</DAY>
  7. </DATE>
  8. <TIME>
  9. <HOUR>16</HOUR>
  10. <MIN>56</MIN>
  11. <SEC>30</SEC>
  12. </TIME>
  13. <AVERAGE>16.18</AVERAGE>19.50

zignorował wczytywanie pozostałych elementów potomnych o tych samych nazwach?