HighDots Forums  

Problem mit XML und appendChild

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Problem mit XML und appendChild in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Dirk Herwig
 
Posts: n/a

Default Problem mit XML und appendChild - 10-08-2009 , 03:47 PM






Hallo,

ich lade von einem Webservice ein XML-Dokument und speichere dieses lokal

_setLayout: function(val) {
// XML Dokument wird geladen und gespeichert in _xmllayout
this._xmllayout = val;
}

Das XML Dokument liegt folgendermaßen vor:
<?xml version="1.0" encoding="utf-8" ?>
<controls id="8" layoutname="Test" art="x" width="1360" height="768"
bgcolor="#950B2D" bgimage="IMG_3372.JPG" showimage="true">
<control id="1" containername="mitte" left="100" top="10" width="500"
height="400" bgcolor="#FF00FF" zindex="10" />
</controls>

Ich möchte nun clientseitig das XML Dokument bearbeiten, bevor ich es wieder
zum Server schicke.

Ich habe versucht, einen neuen Knoten (control) zu erstellen und diesen dann
wieder an das Orginaldokument (controls) anzuhängen, jedoch ohne Erfolg.

_addContainerNode: function("controls", _name, _nid, _left, _top, _width,
_height, _bgcolor) {
tempdiv = document.createElement("control");
tempdivid = document.createAttribute("id");
tempdiv.setAttributeNode(tempdivid);
tempdiv.id = _nid;
tempdivname = document.createAttribute("containername");
tempdiv.setAttributeNode(tempdivname);
tempdiv.containername = _name;
tempdivleft = document.createAttribute("left");
tempdiv.setAttributeNode(tempdivleft);
tempdiv.left = _left;
tempdivtop = document.createAttribute("top");
tempdiv.setAttributeNode(tempdivtop);
tempdiv.top = _top;
tempdivwidth = document.createAttribute("width");
tempdiv.setAttributeNode(tempdivwidth);
tempdiv.width = _width;
tempdivheight = document.createAttribute("height");
tempdiv.setAttributeNode(tempdivheight);
tempdiv.height = _height;
tempdivbgcolor = document.createAttribute("bgcolor");
tempdiv.setAttributeNode(tempdivbgcolor);
tempdiv.bgcolor = _bgcolor;

var nodes = this._xmllayout.getElementsByTagName(_pattern)[0];
nodes.appendChild(tempdiv);
alert("_xmllayout: " + typeof (this._xmllayout) + "<br />" + "tempdiv: "
+ typeof (tempdiv)); // Beides Object

}

Ich erhalte im IE (7) folgende Fehlermeldung an der Stelle mit dem
appendChild:
"Laufzeitfehler in Microsoft JScript: Typen unverträglich".

Könnt ihr mir hier weiterhelfen?

Gruss

Dirk

Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Problem mit XML und appendChild - 10-08-2009 , 06:23 PM






Dirk Herwig wrote:

Quote:
ich lade von einem Webservice ein XML-Dokument und speichere dieses lokal

_setLayout: function(val) {
// XML Dokument wird geladen und gespeichert in _xmllayout
this._xmllayout = val;
}

[...]
Ich möchte nun clientseitig das XML Dokument bearbeiten, bevor ich es
wieder zum Server schicke.

Ich habe versucht, einen neuen Knoten (control) zu erstellen und diesen
dann wieder an das Orginaldokument (controls) anzuhängen, jedoch ohne
Erfolg.

_addContainerNode: function("controls", _name, _nid, _left, _top, _width,
_height, _bgcolor) {
tempdiv = document.createElement("control");
tempdivid = document.createAttribute("id");
[...]
var nodes = this._xmllayout.getElementsByTagName(_pattern)[0];
nodes.appendChild(tempdiv);
alert("_xmllayout: " + typeof (this._xmllayout) + "<br />" + "tempdiv:
"
+ typeof (tempdiv)); // Beides Object

}

Ich erhalte im IE (7) folgende Fehlermeldung an der Stelle mit dem
appendChild:
"Laufzeitfehler in Microsoft JScript: Typen unverträglich".

Könnt ihr mir hier weiterhelfen?
Du musst entweder die Knoten im Kontext des zu ändernden Dokuments erstellen
oder die Knoten jedes Mal importieren. Also nicht `document.createElement'
usw., sondern `this._xmllayout.createElement' usw. Empfehlenswert ist hier
die Verwendung einer lokalen Variablen für `this._xmllayout'.

Ausserdem sind nicht alle lokalen Bezeichner deklariert, was fehlerträchtig
ist.


PointedEars

Reply With Quote
  #3  
Old   
Dirk Herwig
 
Posts: n/a

Default Re: Problem mit XML und appendChild - 10-08-2009 , 07:02 PM



Danke erst einmal für die schnelle Hilfe. Es funktioniert jetzt prima. Ich
habe noch ein paar kleine Probleme mit XML und Javascript. Gibt es dafür
irgendwo eine vernünftige Quelle?

Was meinst Du damit:
Quote:
Ausserdem sind nicht alle lokalen Bezeichner deklariert, was
fehlerträchtig
ist.
Ich bin erst Anfänger mit Javascript und bin für jede Info, wie man etwas
besser machen kann, dankbar.

Danke

Dirk

Reply With Quote
  #4  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Problem mit XML und appendChild - 10-08-2009 , 08:52 PM



Dirk Herwig wrote:

Quote:
Danke erst einmal für die schnelle Hilfe. Es funktioniert jetzt prima. Ich
habe noch ein paar kleine Probleme mit XML und Javascript.

Gibt es dafür irgendwo eine vernünftige Quelle?
Ja, sogar mehrere. Google ist Dein Freund. [psf 6.1]

Quote:
Was meinst Du damit:
Ausserdem sind nicht alle lokalen Bezeichner deklariert, was
fehlerträchtig ist.

Ich bin erst Anfänger mit Javascript und bin für jede Info, wie man etwas
besser machen kann, dankbar.
Lokal definierte Bezeichner sind, im Unterschied zu z.B. PHP oder Python, in
ECMAScript-Implementationen nicht automatisch auch nur lokal gültig. Z.B.
erzeugt die Anweisung

tempdiv = document.createElement("control");

wenn es gut geht, eine Eigenschaft des globalen Objekts namens "tempdiv".
(Etwas ähnliches wie eine globale Variable. Im Unterschied zu einer
globalen Variablen kann die Eigenschaft wieder gelöscht werden.)

Wenn es weniger gut geht, wird eine Eigenschaft eines in einem äusseren
Ausführungskontext referenzierten Objekts, z.B. eine globale Variable
überschrieben (siehe Scope Chain).

Und wenn Du Pech hast, gibt es ein Element mit ID oder Name "tempdiv" in dem
HTML-Dokument, und die Zuweisung führt in MSHTML-basierten Programmen (z.B.
Internet Explorer) zu einem Laufzeitfehler (weil es ein Host-Objekt in der
Scope Chain gibt, welches eine unveränderbare Eigenschaft mit diesem Namen
hat).

Aus diesem Grund sollten alle Bezeichner deklariert werden, also hier z.B.

var tempdiv = document.createElement("control");

Somit wird aus `tempdiv' der Name einer lokalen Variablen (d.h. der Name
einer Eigenschaft des Variablenobjekts dieses Kontextes).

Insgesamt lässt sich Dein Quelltext z.B. folgendermassen verbessern (zur
Zeit ist er auch syntaktisch falsch) und vereinfachen (getestet mit IE
6.0.2800.1106 in wine-1.0.1-174-gc4039bd):

_addContainerNode:
/**
* Adds a new control
*
* @param controls : Element
* @param ... : string
* @type Element|boolean
* @return
* <code>false</code> if unsuccessful;
* a reference to the added control element object otherwise.
* @author ...
*/
function(controls, _name, _nid, _left, _top, _width, _height,
_bgcolor) {
if (!controls) return false;

var d = this._xmllayout;
if (!d) return false;

var control = d.createElement("control");
if (!control) return false;

control.setAttribute("containername", _name);
control.setAttribute("id", _nid);
control.setAttribute("left", _left);
control.setAttribute("top", _top);
control.setAttribute("width", _width);
control.setAttribute("height", _height);
control.setAttribute("bgcolor", _bgcolor);

/* DEBUG: beides "object" */
window.alert([
"_xmllayout: " + typeof d,
"control: " + typeof control,
"control.id: " + control.getAttribute("id")
].join("\n"));

return controls.appendChild(control);
}

Die Notwendigkeit für das Präfix `_' für einige Argumentbezeichner
erschliesst sich mir allerdings nicht.

Übrigens: `typeof null === "object"', d.h. das Ergebnis "object" sagt allein
noch nicht viel aus.


HTH

PointedEars
--
Erst lesen, dann denken, dann posten!
de.comp.lang.javascript FAQ: <http://dcljs.de/>

Reply With Quote
  #5  
Old   
Holger Jeromin
 
Posts: n/a

Default Re: Problem mit XML und appendChild - 10-09-2009 , 02:34 AM



Thomas 'PointedEars' Lahn schrieb am 09.10.2009 02:52:
Quote:
Dirk Herwig wrote:
Danke erst einmal für die schnelle Hilfe. Es funktioniert jetzt prima. Ich
habe noch ein paar kleine Probleme mit XML und Javascript.
Gibt es dafür irgendwo eine vernünftige Quelle?
Ja, sogar mehrere. Google ist Dein Freund. [psf 6.1]
Diese Aussage kombiniert mit deinem "90% aller JS Dokumente sind Müll"
ist keine wirklich gute Hilfe. Damit machst du dir mehr Arbeit als es
nötig wäre :-)

--
Mit freundlichen Grüßen
Holger Jeromin

Reply With Quote
  #6  
Old   
Dirk Herwig
 
Posts: n/a

Default Re: Problem mit XML und appendChild - 10-09-2009 , 04:24 AM



Ich danke erst einmal für die schnelle Hilfe. Die Infos waren sehr hilfreich
und haben mir deutlich weitergeholfen. Über XML und Javascript finde ich
zwar viel in Google, jedoch so spezifische Dinge wie in meiner Anfrage finde
ich überhauptnicht.

Gruss

Dirk

Reply With Quote
  #7  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Problem mit XML und appendChild - 10-09-2009 , 05:01 AM



Holger Jeromin wrote:

Quote:
Thomas 'PointedEars' Lahn schrieb am 09.10.2009 02:52:
Dirk Herwig wrote:
Danke erst einmal für die schnelle Hilfe. Es funktioniert jetzt prima.
Ich habe noch ein paar kleine Probleme mit XML und Javascript.
Gibt es dafür irgendwo eine vernünftige Quelle?
Ja, sogar mehrere. Google ist Dein Freund. [psf 6.1]

Diese Aussage kombiniert mit deinem "90% aller JS Dokumente sind Müll"
ist keine wirklich gute Hilfe.
Du solltest meine Aussagen genauer und vor allem im Zusammenhang lesen.
Obiges schrieb ich nicht; ich schrieb etwas Ähnliches, erwähnte jedoch
erst vor kurzem, wo man die brauchbare Dokumentation findet. Insbesondere
verwies ich in meiner letzten Antwort auf die FAQ.

Quote:
Damit machst du dir mehr Arbeit als es
nötig wäre :-)
Nein, da es nicht mein Job ist, hier zu antworten, mache ich mir tatsächlich
weniger Arbeit.


PointedEars

Reply With Quote
  #8  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Problem mit XML und appendChild - 10-09-2009 , 05:03 AM



Dirk Herwig wrote:

Quote:
Über XML und Javascript finde ich zwar viel in Google, jedoch so
spezifische Dinge wie in meiner Anfrage finde ich überhauptnicht.
Soifz. [psf 10.1] Wann wird Google endlich Schulfach? [psf 6.2]

<http://www.google.com/search?q=xml+document+createlement+appendchild&fil ter=0>

Siehe auch frühere Postings und die FAQ.


PointedEars

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.