XML parsen und Dateninhalt ausgeben

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • XML parsen und Dateninhalt ausgeben

    Hallo,

    folgendes Problem. Ich möchte Dateninhalt aus einer XML Datei auslesen. Dazu nutze ich einen XML Parser.

    Code:
    <SD_AngleAttitude>
      <rotationAngleX><gco:Angle uom="grad">2.5268</gco:Angle></rotationAngleX>
      <rotationAngleY><gco:Angle uom="grad">-0.7971</gco:Angle></rotationAngleY>
      <rotationAngleZ><gco:Angle uom="grad">181.9945</gco:Angle></rotationAngleZ>
    </SD_AngleAttitude>


    Wie kann ich zwei Elemente nacheinander ausgeben, zumal das Element "gco:Angle" häufiger vorkommt.
    Wie man sieht handelt es sich dabei um Winkel. Ich versuche das das Element vor gco:Angle als Name ausgegeben wird und der Winkel dahinter.

    Der Parser:

    PHP Code:
    <?php
    function startElement($parser$element_name$element_attribute) {
    global 
    $ausgabe;
    //Umwandeln in Kleinbuchstaben
    $element_name strtolower($element_name);
    //Überprüfung des Elementnames
    if ($element_name=="gco:angle") {
    $ausgabe .= "<h3>RotationAngleX</h3><p>";
    }
    }

    function 
    endElement($parser$element_name) {
    global 
    $ausgabe;
    // in Kleinbuchstaben umwandeln
    $element_name strtolower($element_name);
    // Überprüfung des Names eines Elementes
    if ($element_name=="gco:angle") {
    $ausgabe .= "</p>";
    }
    }

    function 
    cdata($parser$element_inhalt) {
    global 
    $ausgabe;
    // Der normale Text wird an $ausgabe angehängt
    $ausgabe .= $element_inhalt;
    }
    $xmlFile file("Test.xml");
    $parser xml_parser_create();
    xml_set_element_handler($parser"startElement""endElement");
    xml_set_character_data_handler($parser"cdata");

    foreach(
    $xmlFile as $elem)
    {
    xml_parse($parser$elem);
    }
    xml_parser_free($parser);
    echo (
    $ausgabe);

    ?>
    Ausgabe:

    Code:
    RotationAngleX
    2.5268
    
    RotationAngleX
    -0.7971
    
    RotationAngleX
    181.9945
    Die Ausgabe ist logisch, aber wie kann ich diese Reihenfolge beeinflussen, so dass das Elternelement "rotationAngleX" oder "rotationAngleY" mit einbezogen wird.

    Gruß Maxe

    PS: Der Parser ist stibitzt und angepasst. Davon gibs ja tausende im Netz.

  • #2
    in startElement():
    PHP Code:
    //Überprüfung des Elementnames
    if (strpos($element_name'rotationangle') === 0) {
        
    $ausgabe .= '<h3>'.$element_name.'</h3><p>';

    Comment


    • #3
      Vielen Dank.

      Das zugehörige Attribut "uom" wird in einem Array gespeichert "$element_attributes". Die Ausgabe mit

      PHP Code:
      echo("<pre>");
      print_r($element_attribute);
      echo(
      "</pre>"); 
      ergibt (nur Ausschnitt):
      Code:
      Array
      (
          [UOM] => grad
      )
      
      Array
      (
      )
      
      Array
      (
          [UOM] => grad
      )
      
      Array
      (
      )
      
      Array
      (
          [UOM] => grad
      )
      Wie kann ich auf den ersten optionalen Wert zugreifen? Hier sind zufällig alle gleich. Hat jemand eine Idee?

      Comment


      • #4
        xml_parse_into_struct()

        Comment

        Working...
        X