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

  • Gast-Avatar
    Ein Gast erstellte das Thema Auswertung von xml-Datei mit php.

    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);

    ?>

  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    ergibt:

    Version: 4.4.1
    xml Module: xslt, xml, domxml


    Norbert

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:


  • xabbuh
    antwortet
    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.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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)

    Einen Kommentar schreiben:


  • xabbuh
    antwortet
    Woran genau scheitert es denn?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Kannst du mir mal als Beispiel "BezeichnungLang" rausnehmen?

    Ich komme so nicht klar damit

    Danke
    Norbert

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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.

    Einen Kommentar schreiben:

Lädt...
X