Ankündigung

Einklappen
Keine Ankündigung bisher.

SAX-Parser und Zugriff auf Attribute

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SAX-Parser und Zugriff auf Attribute

    HAllo ich habe mit PHP einen kleinen Parser mittels SAX abgetippelt.
    Mein Problem ist nun der Zugriff auf die Attribute. Diese werden ja
    Code:
    function elem_start($xml_parser, $name, $attr)
    hier in $attrib gespeichert. Ist wohl ein assoziatives Array. Nun wie greif ich auf einzelne Elemente zu. bei einem normalen mach ich das ja über $array[index]. Nur wie hier.

    Danke für den Tipp!

    Gruß niesel

  • #2
    Hallo nieselfriem,

    heißt das, du hast die JAVA-Sourcen in PHP abgetippt? Wenn ja, muss das Verhalten hier identisch sein und du musst entsprechend auf das Attribut-Array zugreifen. Falls das nicht funktioniert, hast du eine andere Implementierung, die mir so nicht bekannt ist.

    Etwas mehr Quelltext und Informationen wären ohnehin nicht schlecht.

    Kommentar


    • #3
      Nö nö! Das ist aus einem PHP-Buch. Sicherlich ist die SAX-Implementierung von JAVA "kopiert" worden (Laut Buch) aber hier mal der ganze Quellcode.
      PHP-Code:
      <?php
      /*
       * Created on 09.04.2007
       *
       * To change the template for this generated file go to
       * Window - Preferences - PHPeclipse - PHP - Code Templates
       */
       
      echo '<html><title>Test</title><body>';
       function 
      elem_start($xml_parser$name$attr)
       {
           foreach(
      $attr as $v)
               {
                   echo 
      $v;
               }
               for (
      $i=0;$i<=2;$i++)
               {
                   echo 
      $attr[$i];
               }
           if (
      $name=="form")
           {
               echo 
      '<form action="index.php" metod="post">';
               
      xml_set_character_data_handler($xml_parser"cdata_ausgeben");
               
           }
       
           if (
      $name=="textarea")
           {
               echo 
      "<textarea cols=\"$v\", lines=\"$v\">";//problem ich möchte z.B. lines=20 und cols=20.
               
      xml_set_character_data_handler($xml_parser"cdata_ausgeben");
               
           }
           else 
           {
               
      xml_set_character_data_handler($xml_parser"cdata_nichtausgeben");
           }
       }
       
       function 
      elem_ende($xml_parser$name)
       {
           if (
      $name=="form")
           {
               echo 
      '</form>';
           }
           
           if (
      $name=="textarea")
           {
               echo 
      '</textarea>';
           }
       }

       function 
      cdata_nichtausgeben($xml$daten)
       {
       }
       
       function 
      cdata_ausgeben($xml$daten)
       {
           echo 
      htmlspecialchars($daten);
       }
       
       
      $xml_parser=xml_parser_create();
       
      xml_parser_set_option ($xml_parserXML_OPTION_CASE_FOLDING0);
       
      xml_set_element_handler($xml_parser"elem_start""elem_ende");
       
      xml_set_character_data_handler($xml_parser"cdata");
       
      $daten=file_get_contents("form.xml");
       
      xml_parse($xml_parser$datentrue);
       
      xml_parser_free($xml_parser);
        echo 
      '</body></html>';  
      ?>

      Kommentar


      • #4
        Re: SAX-Parser und Zugriff auf Attribute

        Zitat von nieselfriem
        Ist wohl ein assoziatives Array. Nun wie greif ich auf einzelne Elemente zu. bei einem normalen mach ich das ja über $array[index]. Nur wie hier.
        Genauso. Es ist ein normales Feld.
        Gegenfrage: Was ist ein anormales Feld?

        Kommentar


        • #5
          Hallo nieselfriem,

          ok, habe ich verstanden. Ich verstehe nur nicht ganz, was du mit dem XML-Parser bezwecken möchtest. Formular-Tags parsen ist meiner Meinung nach so nicht ohne weiteres und vor allem nicht generisch möglich.

          Auf das Attribut-Array solltest du einfach durch Zufriff auf den Offset, der wie der Attribut-Name lautet, zugreifen können. Sollte das nicht helfen, sind print_r() und var_dump() deine Freunde.

          Kommentar


          • #6
            ich möchte ein tool basteln mit dem ich formulare erstellen kann. diese formulare sollen in einer xm-datei gespeichert werden und bei bedarf in ein html-formular umgewandelt werden

            gruß niesel

            Kommentar


            • #7
              Hallo nieselfriem,

              wenn das so ist, solltest du dir zuerst Gedanken machen, was du überhaupt benötigst. Dein Beispiel und deine Fragen sehen mir so aus, als würdest du "einfach mal was schreiben" und hoffst, dass dir einer erklährt, was du machen musst. Da muss ich dich enttäuschen, so wird das nix. Stelle zunächst deine Anforderungen sauber zusammen, sprich wie deklarierst du ein Formular in XML und welche Features soll dein Transformator haben. Nur die Darstellung, dann ist das überflüssig? Evtl. Ausgabe inkl. Validierungs-Funktionen, dann musst du dir eine Meta-Beschriebung für diese Funktion einfallen lassen und die Validierung generisch für jedes Form-Element implementieren. Wenn es weitere Funktionen wie DataBinding sein sollen, muss man sich erst recht um ein Konzept kümmern.

              Wenn du Lust und Zeit hast, schau dir mal mein Kontakt-Formular auf http://christian.zierpflanzenberatun...Seite=Tutorial an ("2. Implementierung des Kontakt-Formulars"), dort wird eine XML-Tag für jedes Form-Element im Template notiert und der Tag-Parser führt intern die Funktionen Darstellung und Validierung gemäß TagLibrary aus. Hier setze ich auch auf XML-HTML-Transformation, jedoch ohne XML-Parser von PHP, sondern einem eigenen, der auf strpos() und substr() basiert. Hast du dazu Fragen, dann stell sie einfach.

              Kommentar


              • #8
                nein so ist das nicht, das ich einfach mal was schreiben will. Es geht mir einfad ersteinmal darum wie ich XML mittels PHP bearbeite. Für das Tool benötige ich sicherlich ein Konzept diverse Planungen usw. (UML kenn ich auch ) Ich versuche mit solchen Dingen mir an kleinen Beispielen evtl. Möglichkeiten kennen zu lernen

                Kommentar


                • #9
                  Na jedenfalls greift man "normal" auf des Feld zu
                  PHP-Code:
                  <?php
                  function elem_start($xml_parser$name$attr)
                  {
                      echo 
                  ' A: '$attr['a'];
                      echo 
                  ' B: '$attr['b'];
                  }

                  function 
                  elem_ende($xml_parser$name) {}

                  $xml_parser=xml_parser_create();
                  xml_parser_set_option ($xml_parserXML_OPTION_CASE_FOLDING0);
                  xml_set_element_handler($xml_parser"elem_start""elem_ende");

                  $daten '<root a="1" b="2">xyz</root>';
                  xml_parse($xml_parser$datentrue);
                  xml_parser_free($xml_parser);
                  ?>

                  Kommentar


                  • #10
                    Hallo nieselfriem,

                    das ist doch schon mal eine gute Grundlage Ich verwende zwar den XML-Parser von PHP nicht, jedoch sind unter http://de3.php.net/manual/en/ref.xml.php einige "nette" Anwendungsbeispiele zu finden, die zeigen, wie das prinzipiell funktioniert.

                    Für das Tool benötige ich sicherlich ein Konzept diverse Planungen usw.
                    Und wie sieht das aus? Du musst doch auch für dein "Ausprobieren" ein Ziel haben? Hast du dir schon mal Gedanken gemacht, welche Anforderungen du an eine "XML-Beschreibungs-Sprache" für Formulare du haben möchtest? Was willst du bezwecken? Ich denke, dass man erst nach einer technischen Umsetzung suchen sollte, wenn man weiß, man steht bei A und möchte nach B. Vorher ist es sinnlos sich Gedanken zu machen, oder Zeit in Implementierungsdetails zu verschecken, wenn man nicht weiß, wo man steht und wo man hingehen möchte.

                    Hast du meinen Link angesehen?

                    Kommentar

                    Lädt...
                    X