In PHP eingelesene XML-Datei bearbeiten und speichern mit Expat

gabelo

Mitglied
Guten Tag,
ich will eine XML-Datei mit dem Expat-Parser in PHP einlesen (was auch funktioniert),
dann mit Hilfe von Switch-Case die einzelnene Elemente ansteuern (was funktioniert),
und diese dann in einer neuen Datei abspeichern (was nicht funktioniert).
Hintergrund ist, dass ich dadurch die einzelenen Werte der Elemente und die Elemente selbst ausgeben bzw. verändern kann.
Also bspw. wird das Element <OS>Windows</OS> mit Switch Case angesteuert und ich kann es dann ausgeben bzw. in der switch-case Funktion angeben was genau ich tun möchte. In dieser Anweisung würd ich gern in eine neue XML-Datei (new_xml.xml) etwas schreiben, für den Anfang einfach das Element OS.
Am Ende würde ich dann das gesamte XML-Dokument mit Ausgestaltung der Switch-Case Anweisung wieder erhalten und könnte, bspw., Die Elementnamen, Elementwerte, Elementattribute alle in einem Rutsch verändern, ersetzen etc.
Das Problem ist,
Versuche ich in der Anweisung new_xml.xml zu öffnen, geht das nur immer wieder von neuen mit
$newFile = fopen("new_xml.xml", "w") or die("Unable to open file") ;
Versuche ich das File außerhalb von switch-case zu öffnen und innerhalb von switch-case zu schreiben mit fwrite, gibts den Fehler undefined variable.
Durch das erneute öffnen von der XML wird aber die Datei immer wieder überschrieben. Es müsste also am Anfang vom parsen geöffnet und am ende vom parsen geschlossen werden.
Falls jemand weiß wie ich dieses Problem beheben kann, bitte helfen.
Oder falls es bessere Lösungen gibt, bitte mir ganz dolle an den Kopf knallen.
mfg
PHP:
<?php

// Initialize the XML parser
$parser=xml_parser_create();

// Function to use at the start of an element
function start($parser,$element_name,$element_attrs) {
    
  switch($element_name) {
    case "OS":
    echo $element_name;
    /*

Hier würde ich in das File schreiben wollen würden mit

$newFile = fopen("new_xml.xml", "w") or die("Unable to open file");
fwrite($newFile, $element_name);


nur ohne 
$newFile = fopen("new_xml.xml", "w") or die("Unable to open file");
da es sonst immer überschrieben wird!!
*/
  }
}

// Function to use at the end of an element
function stop($parser,$element_name) {
  echo "<br>";
}

// Function to use when finding character data
function char($parser,$data) {
  echo $data;
}

// Specify element handler
xml_set_element_handler($parser,"start","stop");

// Specify data handler
xml_set_character_data_handler($parser,"char");

// Open XML file
$fp=fopen("computers.xml","r");

// Read data
echo "<h1>Nummer 1</h1>";
while ($data=fread($fp,4096)) {
  xml_parse($parser,$data,feof($fp)) or
  die (sprintf("XML Error: %s at line %d",
  xml_error_string(xml_get_error_code($parser)),
  xml_get_current_line_number($parser)));
}

// Free the XML parser
xml_parser_free($parser);

echo "</table>";
?>

XML:
<?xml version="1.0" encoding="utf-8"?>
<Hardware>
  <System category="office" ID="1">
    <OS lang="en" typ="no">Windows 10</OS>
    <CPU>Intel Core i7 11700k</CPU>
    <GPU>Intel UHD-Grafik 750</GPU>
    <RAM>Corsair 32GB DDR4 3200MHz</RAM>
    <SSD>Samsung 870 QVO 1TB</SSD>
    <MB>MSI B450</MB>
    <PSU> be quite! 500W</PSU>
    <Case>be quite! Pure Base 500</Case>
        <Extras>
            <Extra> Extra 1 </Extra>
            <Extra> Extra 2 </Extra>
            <Extra> Extra 3 </Extra>
        </Extras>
  </System>
 
  <System category="normal" ID="1">
    <OS lang="en">Windows 10</OS>
    <CPU>Intel Core i5 11600k</CPU>
    <GPU>Intel UHD-Grafik 750</GPU>
    <RAM>Corsair 16GB DDR4 3200MHz</RAM>
    <SSD>Samsung 870 QVO 500GB</SSD>
    <MB>MSI B450</MB>
    <PSU> be quite! 400W</PSU>
    <Case>Sharkoon VS4-V</Case>
  </System>
 
    <System category="gaming" ID="1">
    <OS lang="en">Windows 10</OS>
    <CPU>Intel Core i9 12900k</CPU>
    <GPU>GeForce RTX 3090</GPU>
    <RAM>Corsair 64GB DDR4 3600MHz</RAM>
    <SSD>Samsung 980 Pro 2GB</SSD>
    <MB>ASRock Z690</MB>
    <PSU> be quite! 850W</PSU>
    <Case>be quite! Dark Base Pro 900</Case>
  </System>
</Hardware>
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
lolcore (c#) klasse aus externer cs-datei importieren Andere Programmiersprachen 2
D Python - Tensorflow installieren - Datei in Spyder öffnen Andere Programmiersprachen 6
Kirby.exe json.load() lädt nicht die komplette Datei Andere Programmiersprachen 1
B Python: Wie entferne ich Daten aus einer Datei und plotte sie? Andere Programmiersprachen 2
O C - Datei einlesen Inhalt in struct speichern Andere Programmiersprachen 56
L Fehlermeldung beim lesen aus einer Datei mit Python Andere Programmiersprachen 4
I Klasse aus anderer Datei einbinden Andere Programmiersprachen 1
I Headerdaten einer wav Datei auslesen Andere Programmiersprachen 2
N Mit Batch Datei neue Batch datei erstellen und ausführen Andere Programmiersprachen 3
I Ordner über batch Datei löschen? Andere Programmiersprachen 4
krgewb Computer per bat-Datei herunterfahren Andere Programmiersprachen 1
G (Python) Werte einer ausgelesenen csv Datei verwalten Andere Programmiersprachen 2
krgewb XML-Datei in Resources per XmlReader lesen Andere Programmiersprachen 8
B [C] long long unsigned aus Datei lesen Andere Programmiersprachen 1
K fscanf // Zeilenweises Einlesen aus einer .txt Datei Andere Programmiersprachen 1
M Header-Datei Andere Programmiersprachen 5
H [C#] XML-Datei parsen Andere Programmiersprachen 3
GUI-Programmer FolderBrowserDialog Problem - Mp3 Dateien bearbeiten und speichern Andere Programmiersprachen 1

Ähnliche Java Themen

Neue Themen


Oben