3Danke
ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
429
429
EMPFEHLEN
-
Hi,
ich brauche für ein tool ein Ajax das für eine Auflistung jeden Datensatz einzeln abholt.
Der PHP Teil klappt auch und liefert sauber Datensatz für Datensatz in einer AJAX Schleife zurück:Code :1 2 3 4 5 6 7 8 9 10 11 12
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE WurzelElement SYSTEM 'index.dtd'> <root> <treeViewNode> <requestid>0</requestid> <id>1</id> <parent>0</parent> <fullname>Test-Firma GmbH & CO KG</fullname> <typeid>1</typeid> <type>COMPANY</type> </treeViewNode> </root>
Diese drei Methoden bauen das XML für die Ausgabe zusammen:
hier noch die Methode die das Array in XML parsed...Code :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
function parseXmlHeader() { $this->cXmlResponse = "<?xml version='1.0' encoding='UTF-8'?>\r"; $this->cXmlResponse .= "<!DOCTYPE WurzelElement SYSTEM 'index.dtd'>\r"; $this->cXmlResponse .= "<root>\r"; } function parseXmlFoot() { $this->cXmlResponse .= "</root> \r"; } function getNodes() {//*** holt die Nodes aus der Datenbank! $mDaBa = new clsDataBaseConnector(); if($mDaBa->isConnected()) { $mQuery = " SELECT tvnodes.id, if(tvnodes.parent, tvnodes.parent, 0) as parent, CONCAT(tvnodes.name1, ' ', tvnodes.name2) as fullname, tvnodes.type as typeid, tvnodetypes.name as type FROM tvnodes, tvnodetypes WHERE tvnodetypes.id = tvnodes.type AND tvnodes.parent is NULL LIMIT ".$this->cResponseCounter.",1; "; $mMySqlResult = $mDaBa->Query($mQuery); if($mMySqlResult!=null) $this->parseArray($mMySqlResult); else $this->parseError($mDaBa->Error()); } else $this->parseError($mDaBa->Error()); }Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
function parseArray($aArray) { foreach($aArray as $ds) { $this->cXmlResponse .= "\t<treeViewNode>\r"; $keys = array_keys($ds); $this->cXmlResponse .= "\t\t<requestid>".$this->cResponseCounter."</requestid>\r"; foreach($keys as $key) $this->cXmlResponse .= "\t\t<$key>".$ds[$key]."</$key>\r"; $this->cXmlResponse .= "\t</treeViewNode>\r"; } }
und am Ende wird das ganze noch ausgeben:
Code :1 2 3
header("Content-type: text/xml"); header("Cache-Control: no-store, no-cache"); echo $this->cXmlResponse;
Soweit der PHP Teil, der funktioniert, falls ich nicht irgendwas übersehen habe, denn ich bekomme ein kaputtes XML Objekt... .
Das liefert mir zwar noch ein Oject, das scheint auch XML zu sein, aber folgender Fehler wird im im FireBug gezeigt:Code :1
var xmlObj = XmlRequest.responseXML;
xmlObject....
Fehler habe ich mal als Screenshot angehängt.
Wäre cool wenn jemand ne Lösung für mich hat, ich kämpf da schon den ganzen Tag mit und komm ned weiter.
cu s00n
deAndro
-
Anmerkung 1: Idie Sonderzeichen waren ein Problem, wie es scheint, wie kann man ü, & etc, die aus der Datenbank kommen, so ins XML schreiben das der das nicht als Fehler behandelt?
-
Anmerkung 2: Ist es ein Problem das ich im XML die Einrückung mit /t und die Zeilenumbrüche mit /n vorgenommen habe, weil die werden wiederrum als einzelne Nodes behandelt...
-
Du musst die Zeichen als Entities darstellen. Z.B. "&" für "&". Ab PHP 5.4 geht das mit htmlentities (http://php.net/manual/en/function.htmlentities.php).
Jeder Text ist ein Knoten. Wenn du mehrzeiligen Text willst, musst du ihn in einen CDATA Block packen.
Code :1 2 3 4 5 6
<![CDATA[ Mehrzeiliger Text Hier mit >>>Sonderzeichen<<< ]]>
-
OK, das mit den Sonderzeichen leuchtet noch ein, weil es auch Steuerzeichen sind. Darf ich zwischen den Tags keine Formatierungen ausgeben? Ich habe die Zeilenumbrüche und Tabs ausgegeben, damit das auch sauber formatiert ist.
oderCode :1
<tag></tag>\r
Code :1
\t\t<tag></tag>\r
-
-
autsch,... dann lass ich die weg. geht auch soweit. aber XML hat mir unter .NET schon nicht gefallen und nun unter JavaScript *schüttel*.. überhaupt so ohne compiler, richtiges intellisense.. *schaurig*
-
Also wenn du dich an diesen Textknoten störst, dann ist wohl eher dein Code zum Verarbeiten fehlerhaft. Ich habe damit bisher noch keine Probleme gehabt.
Code xml:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE WurzelElement SYSTEM 'index.dtd'> <root> <treeViewNode> <requestid>0</requestid> <id>1</id> <parent>0</parent> <fullname>Test-Firma GmbH & CO KG</fullname> <typeid>1</typeid> <type>COMPANY</type> </treeViewNode> <treeViewNode> <requestid>0</requestid> <id>1</id> <parent>0</parent> <fullname>Foobar</fullname> <typeid>1</typeid> <type>COMPANY</type> </treeViewNode> </root>
Code javascript:1 2 3 4 5 6 7 8 9
if(xhr.readyState === 4) { var xml = xhr.responseXML; var names = xml.documentElement.getElementsByTagName('fullname'); for(var i = 0; i < names.length; i++) { alert(names[i].firstChild.nodeValue); } }
-
18.12.11 16:50 #9
- Registriert seit
- Dec 2011
- Beiträge
- 30
Du solltest nicht versuchen, XML per Zeichenkettenkonkatenation zusammenbasteln, dabei kommt selten XML heraus. Es gibt in PHP unter anderem http://www.php.net/manual/en/book.xmlwriter.php oder auch SimpleXML oder DOM, um XML programmatisch zu erstellen und damit dann auch ein den XML-Syntaxregeln entsprechendes Dokument zu bekommen.
Als Anmerkung noch: wenn du schon eine DTD verwendest, dann auch konsequent und richtig, so du DOCTYPE WurzelElement schreibst, dann sollte das Wurzelelement in deinem Dokument auch genau so (also "WurzelElement") lauten, du hast aber "root" genommen.
-
OK, XML ist soweit klar. Werde mir das noch mit dem XML writer in Ruhe ansehen, danke für den TIP
Ähnliche Themen
-
Abgerundete Ecken unsauber
Von Chris321 im Forum PhotoshopAntworten: 10Letzter Beitrag: 06.05.08, 17:46 -
maja .bin zu max = unsauber
Von nugman im Forum 3D Studio MaxAntworten: 0Letzter Beitrag: 16.07.06, 15:32 -
Verläufe unsauber!
Von Scheiba im Forum PhotoshopAntworten: 11Letzter Beitrag: 24.06.05, 22:29 -
unsauber gerendert ? warum ?
Von shortybmc im Forum Cinema 4DAntworten: 4Letzter Beitrag: 06.05.04, 00:43 -
Encore Highlights sehen unsauber aus
Von ErnstAlbern im Forum Videoschnitt, Videotechnik & -produktionAntworten: 2Letzter Beitrag: 20.02.04, 00:11





Zitieren


Login





