Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

1

11.07.2013, 10:40

XML, Javascript und XPath - Problem beim Auslesen der .xml Datei

Einen wunderschoenen guten Morgen,

ich bin nun weiter fortgeschritten an meinem zurzeitigen Projekt, doch bin ich auf ein neues Problem gestossen, bei dem ich bis jetzt keine Loesung finden konnte.
Mein erster Thread: XML - bestimmte Attribute auslesen und formatiert ausgeben

Also ich habe mich nun dafuer entschieden, die .xml Datei mit Javascript und mit Hilfe von XPath zu verarbeiten, und ich bin nun soweit, dass alles super ausgelesen wird und auch angezeigt wird.
Ich musste dafuer den Internet Explorer benutzen und das ganze musste auf XAMP laufen, da beim Internet Explorer, eine Fehlermeldung mit "Access denied" kam und dies konnte ich beheben, wenn ich es auf einem Server in meinem Fall lokal mit XAMP laufen lasse.

Das Problem nun ist, dass ich waehrend der Testphase nur ein Snapshot der .xml Datei hatte, die ich mit in den htdocs Ordner unter XAMP gepackt habe.

Die richtige .xml Datei, die von einem anderen Programm erzeugt wird, wird aber lokal gespeichert und man muss dazu noch bedenken, dass sich diese jede Sekunde refresht, da sich die Werte in der Datei kontinuierlich aendern.
Zum laden der Datei benutze ich folgende Funktion

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function loadXMLDoc(dname) 
{ 
if (window.XMLHttpRequest) 
{ 
xhttp=new XMLHttpRequest(); 
} 
else 
{ 
xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xhttp.open("GET",dname,false); 
xhttp.send(""); 
return xhttp.responseXML; 
}


und rufe die Funktion dann mit

Quellcode

1
xml=loadXMLDoc("cmSnapshot.xml");


auf.

Nun, da die richtige .xml Datei ja nicht in dem htdocs Ordner auf XAMP ist, kann ich diesen einfachen Aufruf "cmSnapshot.xml" nicht mehr machen.
Ich habe schon sowas wie \\..\..\.. .xml probiert oder mit C://.. aber es hat alles leider nicht funktioniert. Ich habe auch schon eine Shortcut der Datei mit den in den htdocs Ordner gelegt, aber die Shortcut Datei wird einfach von meinem "Programm" ignoriert.


Ich weiss zurzeit leider nicht, was ich weiter versuchen koennte und hoffe, dass ihr mir da vielleicht weiterhelfen koennt.

Gruss

Simon

P.S.: Konnte die .html Datei leider nicht einfach nur in den Anhang packen, darum schreibe ich sie einfach mal mit hier drunter.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
<!DOCTYPE html> 
<html> 
<head> 
<title> Telephone Service </title> 
<link rel="stylesheet" type="text/css" href="style.css"> 
<meta http-equiv="refresh" content="1; ,URL=http://localhost/blaaa2/test.html"> 
</head> 
<body> 
<script> 
// function: open the .xml file 
function loadXMLDoc(dname) 
{ 
if (window.XMLHttpRequest) 
{ 
xhttp=new XMLHttpRequest(); 
} 
else 
{ 
xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xhttp.open("GET",dname,false); 
xhttp.send(""); 
return xhttp.responseXML; 
} 
// open the .xml file 
xml=loadXMLDoc("cmSnapshot.xml"); 
</script> 

<table id="mytable" border="1" align="centre" width="100%" height="100%" cellpadding="5"> 
<tr> 
<th colspan="2" width="50%" bgcolor="grey"><span class="headline"> Queue Display </span></th> 
<th colspan="2" width="50%" bgcolor="grey"><span class="headline"> Available Users </span></th> 
</tr> 
<tr align="middle"> 
<td colspan="2" class="tlge"> 
<span class="boldtext"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/QN"); // QN - General Enquiries 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
<br /><br /> 
</span> 
<span class="bignumber"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/QLAP"); // QLAP - General Enquiries 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
</span> 
</td> 
<td colspan="2" class="trge"> 
<span class="boldtext"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/QN"); // QN - General Enquiries 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
<br /><br /> 
</span> 
<span class="bignumber"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/TUA"); // TUA - General Enquiries 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
</span> 
</td> 
</tr> 
<tr align="middle"> 
<td colspan="2" class="tlrep"> 
<span class="boldtext"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/QN"); // QN - Repairs 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
<br /><br /> 
</span> 
<span class="bignumber"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/QLAP"); // QLAP - Repairs 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
</span> 
</td> 
<td colspan="2" class="trrep"> 
<span class="boldtext"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/QN"); // QN - Repairs 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
<br /><br /> 
</span> 
<span class="bignumber"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/TUA"); // TUA - Repairs 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
</span> 
</td> 
</tr align="middle"> 
<tr> 
<th colspan="2" width="50%" bgcolor="grey"> 
<span class="headline"> 
Queue Summary Display - SLA 
</span> 
</th> 
<th colspan="2" bgcolor="grey" width="50%" > 
<span class="headline"> 
Current Wait Time 
</span> 
</th> 
</tr> 
<tr align="middle"> 
<td bgcolor="yellow" width="25%"> 
<span class="normaltext"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/QN"); // QN - General Enquiries 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
<br /><br /><br /> 
Presented 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/TT"); // TT - General Enquiries 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
<br /><br /> 
Abandoned 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/TA"); // TA - General Enquiries 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
<br /><br /> 
Queueing 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/QLAP"); // QLAP - General Enquiries 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
</span> 
</td> 
<td bgcolor="yellow" width="25%"> 
<span class="normaltext"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/QN"); // QN - Repairs 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
<br /><br /><br /> 
Presented 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/TT"); // TT - Repairs 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
<br /><br /> 
Abandoned 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/TA"); // TA - Repairs 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
<br /><br /> 
Queueing 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/QLAP"); // QLAP - Repairs 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
</span> 
</td> 
<td rowspan="2" width="25%" class="brge"> 
<span class="boldtext"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/QN"); // QN - General Enquiries 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
</span><br /> 
<br /><br /> 
<span class="timer"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/AWT"); // AWT - General Enquiries 
// document.write(nodes[0].childNodes[0].nodeValue); 
var time = nodes[0].childNodes[0].nodeValue; 
var hour = Math.floor ( time / 3600 ); 
var minute = Math.floor ( time%3600 / 60); 
var secound = Math.floor ( time%60); 

document.write(hour<10 ? '0'+hour : hour); 
document.write(":"); 
document.write(minute<10 ? '0'+minute : minute); 
document.write(":"); 
document.write(secound<10 ? '0'+secound : secound); 
</script> 
</span> 
</td> 
<td rowspan="2" width="25%" class="brrep"> 
<span class="boldtext"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/QN"); // QN - Repairs 
document.write(nodes[0].childNodes[0].nodeValue); 
</script> 
</span> 
<br /><br /><br /> 
<span class="timer"> 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/AWT"); // AWT - Repairs 
// document.write(nodes[0].childNodes[0].nodeValue); 
var time = nodes[0].childNodes[0].nodeValue; 
var hour = Math.floor ( time / 3600 ); 
var minute = Math.floor ( time%3600 / 60); 
var secound = Math.floor ( time%60); 

document.write(hour<10 ? '0'+hour : hour); 
document.write(":"); 
document.write(minute<10 ? '0'+minute : minute); 
document.write(":"); 
document.write(secound<10 ? '0'+secound : secound); 
</script> 
</span> 
</td> 
</tr> 
<tr align="middle"> 
<td bgcolor="red"> 
<span class="normaltext"> SLA 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/TASLA"); // QN - General Enquiries 
document.write(nodes[0].childNodes[0].nodeValue); 
</script>% 
</span> 
</td> 
<td bgcolor="red"> 
<span class="normaltext"> SLA 
<script> 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/TASLA"); // TASLA - Repairs 
document.write(nodes[0].childNodes[0].nodeValue); 
</script>% 
</span> 
</td> 
</tr> 
</table> 

<!-- backgroundColor --> 
<script> 
// top left General Enquiries 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/QLAP"); 
var x = document.getElementById("mytable").getElementsByClassName("tlge"); 
if ( nodes[0].childNodes[0].nodeValue == 0 ) 
x[0].style.backgroundColor = "red"; 
else 
x[0].style.backgroundColor = "green"; 
// top right General Enquiries 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/TUA"); 
var x = document.getElementById("mytable").getElementsByClassName("trge"); 
if ( nodes[0].childNodes[0].nodeValue == 0 ) 
x[0].style.backgroundColor = "green"; 
else 
x[0].style.backgroundColor = "red"; 
// top left Repairs 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/QLAP"); 
var x = document.getElementById("mytable").getElementsByClassName("tlrep"); 
if ( nodes[0].childNodes[0].nodeValue == 0 ) 
x[0].style.backgroundColor = "red"; 
else 
x[0].style.backgroundColor = "green"; 
// top right Repairs 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/TUA"); 
var x = document.getElementById("mytable").getElementsByClassName("trrep"); 
if ( nodes[0].childNodes[0].nodeValue == 0 ) 
x[0].style.backgroundColor = "green"; 
else 
x[0].style.backgroundColor = "red"; 
// bottom right General Enquiries 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[2]/AWT"); 
var x = document.getElementById("mytable").getElementsByClassName("brge"); 
var time = nodes[0].childNodes[0].nodeValue; 
var minute = Math.floor ( time%3600 / 60); 
if ( minute >= 0 && minute < 2 ) 
x[0].style.backgroundColor = "green"; 
else if ( minute >= 2 && minute < 5 ) 
x[0].style.backgroundColor = "orange"; 
else 
x[0].style.backgroundColor = "red"; 
// bottom right Repairs 
var nodes=xml.selectNodes("/CMEnterprise/QUEUES/QS[18]/AWT"); 
var x = document.getElementById("mytable").getElementsByClassName("brrep"); 
var time = nodes[0].childNodes[0].nodeValue; 
var minute = Math.floor ( time%3600 / 60); 
if ( minute >= 0 && minute < 2 ) 
x[0].style.backgroundColor = "green"; 
else if ( minute >= 2 && minute < 5 ) 
x[0].style.backgroundColor = "orange"; 
else 
x[0].style.backgroundColor = "red"; 


</script> 

</body> 
</html>

Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

11.07.2013, 11:57

Du triffst da auf Sicherheitsmaßnahmen im Browser und dem Webserver, die verhindern das man nicht unbegrenzt Dateien im System lesen und schreiben kann. Ich hätte trotzdem gedacht, dass es lokal (ohne Server) funktionieren sollte. Da weiß ich aber zu wenig von den Beschränkungen.

Bzgl. Server sperrt der Apache standardmäßig den Zugriff auf Dateien außerhalb des DocumentRoot. Unter http://httpd.apache.org/docs/2.2/urlmapping.html#outside steht was dazu wie man an Dateien außerhalb kommt. Ich weiß nicht wie die Configs bei XAMPP genau aufgebaut sind, aber irgendwo wird es eine httpd.conf oder apache2.conf o.ä. geben, in der die Server oder VirtualHost Einstellungen sind. Dort kann man dann z.B. den Alias einfügen.

3

11.07.2013, 12:14

Hm, soweit ich weiss darf man beim IE zumindest aus dem aktuellen Ordner ohne weitere Berechtigungen lesen. Also wenn dein einziger Grund war einen Apache zu benutzen, dass der Aufruf auf die XML Datei wegen Access Denied fehlgeschlagen ist, dann lag's am wahrscheinlichsten daran dass diese in einem anderen Ordner lag und ich würd's nochmal ohne Apache mit meinem Vorschlag unten ausprobieren...

Das, was mir jetzt so spontan einfallen würde, würde wahrscheinlich dein Problem mit dem XAMP und auch das Problem mit dem Access Denied lösen: Erstelle eine Junction oder einen Hardlink auf den Ordner in dem die Datei liegt. Ab Windows Vista mein ich kann man das mit hauseigenen Tools machen, ansonsten musst du dir das Tool von Sysinternals herunterladen: http://technet.microsoft.com/de-de/sysin…s/bb896768.aspx

z.B. ohne Junction

mklink /j "localDir" "remoteDir"

mit Junction läuft das ähnlich ab, nur ohne den /j Parameter.

junction "localDir" "remoteDir"

Wenn du den Link auf einen Unterordner deiner HTML Seite setzt, solltest du wahrscheinlich nachher an die XML Datei in dem verlinkten Ordner herankommen (ich habe es jetzt noch nicht ausprobiert). Rechte-Probleme und so mal außen vorgelassen.
Development blog: http://www.walawala.org/blog

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »WalaWala« (11.07.2013, 12:21)


BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

4

11.07.2013, 12:27

Danke fuer die schnelle Antwort :)

Ich habe nachdem ich dies gepostet habe direkt weiter nach meinem Problem gesucht und bin dann auf den Begriff "DocumentRoot" gestossen und nun habe ich einfach in der httpd.conf vom Apache rummgespielt und den Pfad vom DocumentRoot auf den von der .xml Datei gelegt und dann habe ich meine .html einfach auch in den Ordner gepackt.

Ja was soll ich sagen... es klappt :D

Werde mir aber noch genauer das Problem mit dem Access Denied anschaun, da es ohne XAMP natuerlich noch besser waere.

dankende Gruesse
Simon

5

11.07.2013, 12:36

Hm, hab grad noch etwas gelesen, und es ist anscheinend so, dass der HTTP Request im IE nicht lokal funktioniert, was dein Verhalten erklären würde.
Was du aber machen kannst, wenn Du wirklich nur für den IE entwickeln willst, wäre ein ActiveX Objekt zu erstellen, welches das XML lädt:

Quellcode

1
2
3
4
5
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load(localXmlfile);

alert(xmlDoc.xml);
Development blog: http://www.walawala.org/blog

BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

6

11.07.2013, 13:12

Das habe ich ja auch in meiner If anweisung in der Load Funktion, die ich oben seperat gepostet habe, eingebaut.

Ich verstehe wenn ich ehrlich bin zwar nicht genau die Funktion der If - Anweisung aber es funktioniert :D

7

11.07.2013, 13:41

Wenn du genau hinschaust habe ich ein anderes ActiveX erstellt in meinem Beispiel - funktioniert das jetzt auch ohne Apache bei dir?

... Die IF-Anweisung fragt nur ab, ob es in dem Browser ein natives Request-Objekt gibt und benutzt dann dieses, anstatt in dem anderen Fall ein ActiveX für den HTTP Request zu benutzen (was nur im IE funktioniert, über Sinn oder Unsinn dieses If's kann man bestimmt streiten, aber wenn's tut nimm's erstmal so hin).

Nochmal zur Erklärung: Das ActiveX in meinem Beispiel ist nicht für ein HTTP Request da, sondern einzig und allein, um XML Dateien zu laden und zu parsen, weshalb dort auch andere Rechte gelten als beim HTTP Request was du oben gepostet hast...
Development blog: http://www.walawala.org/blog

BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

8

11.07.2013, 14:37

Ich werds mal fix ausprobieren und werde dir gleich berichten :)

BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

9

11.07.2013, 14:44

Was genau soll ich denn dann genau von der Funktion zurueck geben ? Weiss gerade nicht genau, wie ich dein Codeausschnitt bei mir implementieren soll.

10

11.07.2013, 15:31

Einfach den Script-Tag ab Zeile 9 hiermit ersetzen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
<script>
    // function: open the .xml file
    function loadXMLDoc(dname)
    {
        var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.load(dname);
        return xmlDoc.xml;
    }
    // open the .xml file
    var xml = loadXMLDoc("cmSnapshot.xml");
</script>


Hab's mal wieder nicht getestet, aber du schaffst das schon ;)
Development blog: http://www.walawala.org/blog

Werbeanzeige