tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von CPoly
  • 1 Beitrag von CPoly
  • 1 Beitrag von Martin Honnen
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
429
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    deAndro deAndro ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    87
    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:
    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());     
            }
    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
    
    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... .
    Code :
    1
    
    var xmlObj = XmlRequest.responseXML;
    Das liefert mir zwar noch ein Oject, das scheint auch XML zu sein, aber folgender Fehler wird im im FireBug gezeigt:
    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
     

  2. #2
    deAndro deAndro ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    87
    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?
     

  3. #3
    deAndro deAndro ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    87
    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...
     

  4. #4
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von deAndro Beitrag anzeigen
    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?
    Du musst die Zeichen als Entities darstellen. Z.B. "&amp;" für "&". Ab PHP 5.4 geht das mit htmlentities (http://php.net/manual/en/function.htmlentities.php).

    Zitat Zitat von deAndro Beitrag anzeigen
    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...
    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<<<
    ]]>
    deAndro bedankt sich. 

  5. #5
    deAndro deAndro ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    87
    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.
    Code :
    1
    
    <tag></tag>\r
    oder
    Code :
    1
    
    \t\t<tag></tag>\r
     

  6. #6
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von deAndro Beitrag anzeigen
    Darf ich zwischen den Tags keine Formatierungen ausgeben?
    Da spricht nichts dagegen. Du musst nur bedenken, dass das

    Code :
    1
    
    <tag></tag>\r

    afaik drei Knoten sind. Einer vom Typ "tag", ein leerer Textknoten und ein Textknoten mit "\r".
     

  7. #7
    deAndro deAndro ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    87
    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*
     

  8. #8
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    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 &amp; 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);
        }
    }
    deAndro bedankt sich. 

  9. #9
    Martin Honnen Martin Honnen ist offline Mitglied Bronze
    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.
    deAndro bedankt sich. 

  10. #10
    deAndro deAndro ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    87
    OK, XML ist soweit klar. Werde mir das noch mit dem XML writer in Ruhe ansehen, danke für den TIP
     

Ähnliche Themen

  1. Abgerundete Ecken unsauber
    Von Chris321 im Forum Photoshop
    Antworten: 10
    Letzter Beitrag: 06.05.08, 17:46
  2. maja .bin zu max = unsauber
    Von nugman im Forum 3D Studio Max
    Antworten: 0
    Letzter Beitrag: 16.07.06, 15:32
  3. Verläufe unsauber!
    Von Scheiba im Forum Photoshop
    Antworten: 11
    Letzter Beitrag: 24.06.05, 22:29
  4. unsauber gerendert ? warum ?
    Von shortybmc im Forum Cinema 4D
    Antworten: 4
    Letzter Beitrag: 06.05.04, 00:43
  5. Encore Highlights sehen unsauber aus
    Von ErnstAlbern im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 2
    Letzter Beitrag: 20.02.04, 00:11