Ankündigung

Einklappen
Keine Ankündigung bisher.

Auswertung von xml-Datei mit php

Einklappen

Neue Werbung 2019

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

  • Auswertung von xml-Datei mit php

    Mit nachstehendem Script lese ich eine xml-Datei aus. Wie kann ich veranlassen, dass ein "Element" (z.B. "Bezeichnunglang") nicht angezeigt werden. Die Datei soll nur teilweise gezeigt werden. Vieles ist uninteressant.
    Kann mir da jemand helfen?
    Vielen Dank - Norbert

    <?php

    $file = "http://content.brenneisen-capital.de/content.asp?VP=4021&PG=2" ;

    function startElement($parser, $name, $attrs){
    switch($name){
    case "CONTENT":
    break;
    case "PRODUKTGRUPPE":
    //echo "<h3>" . ucfirst(strtolower($name)) . $attrs['ID'] . " " . $attrs['BEZEICHNUNG'] . "</h3><table>\n";
    echo "<table>\n";
    break;
    case "PRODUKT":
    echo "<tr><td colspan='2'> <hr></td></tr>\n";
    break;
    default:
    echo "<tr><td><p class='titel'>" . ucfirst(strtolower($name)) . "</p></td><td>";
    }
    }

    function endElement($parser, $name){
    switch($name){
    case "CONTENT":
    break;
    case "PRODUKTGRUPPE":
    echo "</table>\n";
    break;
    case "PRODUKT":
    echo "\n";
    break;
    default:
    echo "</td></tr>\n";
    }
    }

    function characterData($parser, $data){
    echo "$data";
    }


    $xml_parser = xml_parser_create();
    xml_set_element_handler($xml_parser, "startElement", "endElement");
    xml_set_character_data_handler($xml_parser, "characterData");
    if (!($fp = fopen($file, "r"))) {
    die("could not open XML input");
    }

    while ($data = fread($fp, 4096)) {
    if (!xml_parse($xml_parser, $data, feof($fp))) {
    die(sprintf("XML error: %s at line %d",
    xml_error_string(xml_get_error_code($xml_parser)),
    xml_get_current_line_number($xml_parser)));
    }
    }
    xml_parser_free($xml_parser);

    ?>

  • #2
    function startElement($parser, $name, $attrs){
    In dieser Funktion wird Dir angezeigt, welches Element gerade "anfängt". Hier kannst Du also entscheiden, ob die Daten angezeigt werden sollen oder nicht. Du musst diese Entscheidung/Information nur so abspeichern, dass sie in den anderen Funktionen verfügbar ist. In endElement machst Du die Entscheidung dann entsprechend ungültig.

    Kommentar


    • #3
      Kannst du mir mal als Beispiel "BezeichnungLang" rausnehmen?

      Ich komme so nicht klar damit

      Danke
      Norbert

      Kommentar


      • #4
        Woran genau scheitert es denn?

        Kommentar


        • #5
          ich möchte aus der XML-Quelle

          http://content.brenneisen-capital.de...p?VP=4021&PG=2

          nur gezielt Datensätze auslesen. Mit den oben gezeigten Script lese ich alles komplett aus. Einzelne Datensätze nicht anzuzeigen schaffe ich nicht. Benötige dazu ein kleines Beispiel, dann kann ich den Rest entsprechend anpassen

          Danke
          Norbert (habe wenig PHP-Kenntnisse, sorry)

          Kommentar


          • #6
            Dazu hat Bruchpilot dir doch schon geschrieben, dass du in der Funktion startElement() prüfen kannst, um was für ein Element es sich handelt und gegebenenfalls die Ausgabe unterbinden kannst.

            Kommentar


            • #7
              Ich würde das garnicht über DOM machen, sondern per xsl. Die Frage dabei ist nur, ob das bei Dir Verfügbar ist.
              PHP-Code:
              <?php
              <?php
              $source 
              'http://content.brenneisen-capital.de/content.asp?VP=4021&PG=2';
              $xsl_data  '
                      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                          <xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes" />
                          <xsl:template match="BezeichnungLang">
                          </xsl:template>
                          <xsl:template match="@*|node()">
                              <xsl:copy>
                                  <xsl:apply-templates select="@*|node()"/>
                              </xsl:copy>
                          </xsl:template>
                      </xsl:stylesheet>'
              ;

              $xml = new DOMDocument;
              $xml->load($source);

              $xsl = new DOMDocument;
              $xsl->loadXML($xsl_data);

              $proc = new XSLTProcessor;
              $proc->importStyleSheet($xsl);

              echo 
              $proc->transformToXML($xml);
              ?>
              Die typische Kopie-Vorlage
              Code:
              			<xsl:template match="@*|node()">
              				<xsl:copy>
              					<xsl:apply-templates select="@*|node()"/>
              				</xsl:copy>
              			</xsl:template>
              erstellt einfach wieder genau so ein Element wie im Eingabedokument in der Ausgabe. Und
              Code:
              			<xsl:template match="BezeichnungLang">
              			</xsl:template>
              tut für das Element BezeichnungLang garnichts -> ausgefiltert.

              Kommentar


              • #8
                geht leider nicht:

                Fatal error: Call to undefined function: load() in /homepages/15/d33065972/htdocs/anlagen/pg2_test3.php on line 21

                line 21:
                $xml->load($source);


                Schade, oder hab ich was falsch gemacht?

                Norbert

                Kommentar


                • #9
                  Was gibt
                  PHP-Code:
                  <?php
                  function pxml($a) {
                      return (
                  strpos($a"xml")!==false||strpos($a"xsl")!==false);
                  }

                  echo 
                  'Version: 'phpversion(), "
                  \n"
                  ;
                  $e array_filter(get_loaded_extensions(), 'pxml');
                  echo 
                  'xml Module: 'join(', '$e), "
                  \n"
                  ;
                  ?>
                  bei Dir aus?

                  Kommentar


                  • #10
                    ergibt:

                    Version: 4.4.1
                    xml Module: xslt, xml, domxml


                    Norbert

                    Kommentar


                    • #11
                      PHP-Code:
                      <?php
                      $xsl 
                      '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                              <xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes" />
                              <xsl:template match="BezeichnungLang">
                              </xsl:template>
                              <xsl:template match="@*|node()">
                                  <xsl:copy>
                                      <xsl:apply-templates select="@*|node()"/>
                                  </xsl:copy>
                              </xsl:template>
                          </xsl:stylesheet>'
                      ;

                      $source 'http://content.brenneisen-capital.de/content.asp?VP=4021&PG=2';

                      $arguments = array(
                           
                      '/_xml' => file_get_contents($source),
                           
                      '/_xsl' => $xsl
                      );

                      $xh xslt_create();
                      $result xslt_process($xh'arg:/_xml''arg:/_xsl'NULL$arguments);
                      if (!
                      $result) {
                          die(
                      xslt_error($xh));
                      }
                      xslt_free($xh);

                      echo 
                      $result;
                      ?>
                      Aber Spaß macht xml/php erst mit libxml/php5

                      Kommentar


                      • #12
                        Super. Damit bekomme ich die xml-Datei mit den von mir gewünschten Datensätzen. Mit dem ersten Script kann ich die dann auslesen und formatieren. Klappt klasse.
                        Siehe: www.clf.info/anlagen/pg2.php
                        D A N K E !!

                        Wie kann ich nach $xsl... einen Kommentar einfügen? Damit ich später auch noch weiss, was ich anpassen muss/kann

                        Vielen Dank nochmal an alle, die mir so gut geholfen haben

                        Norbert

                        Kommentar

                        Lädt...
                        X