Suche…


Erstellen Sie eine XML-Datei mit XMLWriter

Instanziieren eines XMLWriter-Objekts:

$xml = new XMLWriter();

Als nächstes öffnen Sie die Datei, in die Sie schreiben möchten. Um beispielsweise in /var/www/example.com/xml/output.xml zu schreiben, verwenden Sie:

$xml->openUri('file:///var/www/example.com/xml/output.xml');

So starten Sie das Dokument (erstellen Sie das XML-Tag "Open"):

$xml->startDocument('1.0', 'utf-8');

Dies wird ausgegeben:

<?xml version="1.0" encoding="UTF-8"?>

Jetzt können Sie mit dem Schreiben von Elementen beginnen:

$xml->writeElement('foo', 'bar');

Dadurch wird das XML generiert:

<foo>bar</foo>

Wenn Sie etwas komplexeres als einfach Knoten mit einfachen Werten benötigen, können Sie ein Element auch "starten" und Attribute hinzufügen, bevor Sie es schließen:

$xml->startElement('foo');
$xml->writeAttribute('bar', 'baz');
$xml->writeCdata('Lorem ipsum');
$xml->endElement();

Dies wird ausgegeben:

<foo bar="baz"><![CDATA[Lorem ipsum]]></foo>

Lesen Sie ein XML-Dokument mit DOMDocument

Ähnlich wie SimpleXML können Sie DOMDocument verwenden, um XML aus einer Zeichenfolge oder einer XML-Datei zu analysieren

1. Aus einer Schnur

$doc = new DOMDocument();
$doc->loadXML($string);

2. Aus einer Datei

$doc = new DOMDocument();
$doc->load('books.xml');// use the actual file path. Absolute or relative

Beispiel für das Parsing

Berücksichtigen Sie folgendes XML:

<?xml version="1.0" encoding="UTF-8"?>
<books>
   <book>
      <name>PHP - An Introduction</name>
      <price>$5.95</price>
      <id>1</id>
   </book>
   <book>
      <name>PHP - Advanced</name>
      <price>$25.00</price>
      <id>2</id>
   </book>
</books>

Dies ist ein Beispielcode zum Analysieren

$books = $doc->getElementsByTagName('book');
foreach ($books as $book) {
    $title = $book->getElementsByTagName('name')->item(0)->nodeValue;
    $price = $book->getElementsByTagName('price')->item(0)->nodeValue;
    $id = $book->getElementsByTagName('id')->item(0)->nodeValue;
    print_r ("The title of the book $id is $title and it costs $price." . "\n");
}

Dies wird ausgegeben:

Der Titel des Buches 1 lautet PHP - An Introduction und kostet $ 5,95.

Der Titel des Buches 2 ist PHP - Advanced und kostet $ 25,00.

Erstellen Sie ein XML mit DomDocument

Um ein XML mit DOMDocument zu erstellen, müssen Sie im Grunde alle Tags und Attribute mit den createElement() und createAttribute() erstellen. Sie erstellen die XML-Struktur mit appendChild() .

Das folgende Beispiel enthält Tags, Attribute, einen CDATA-Abschnitt und einen anderen Namespace für das zweite Tag:

$dom = new DOMDocument('1.0', 'utf-8');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;

//create the main tags, without values
$books = $dom->createElement('books');
$book_1 = $dom->createElement('book');

// create some tags with values
$name_1 = $dom->createElement('name', 'PHP - An Introduction');
$price_1 = $dom->createElement('price', '$5.95');
$id_1 = $dom->createElement('id', '1');

//create  and append an attribute
$attr_1 = $dom->createAttribute('version');
$attr_1->value = '1.0';
//append the attribute
$id_1->appendChild($attr_1);

//create the second tag book with different namespace
$namespace = 'www.example.com/libraryns/1.0';

//include the namespace prefix in the books tag
$books->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:ns', $namespace);
$book_2 = $dom->createElementNS($namespace,'ns:book');
$name_2 = $dom->createElementNS($namespace, 'ns:name');

//create a CDATA section (that is another DOMNode instance) and put it inside the name tag
$name_cdata = $dom->createCDATASection('PHP - Advanced');
$name_2->appendChild($name_cdata);
$price_2 = $dom->createElementNS($namespace, 'ns:price', '$25.00');
$id_2 = $dom->createElementNS($namespace, 'ns:id', '2');

//create the XML structure
$books->appendChild($book_1);
$book_1->appendChild($name_1);
$book_1->appendChild($price_1);
$book_1->appendChild($id_1);
$books->appendChild($book_2);
$book_2->appendChild($name_2);
$book_2->appendChild($price_2);
$book_2->appendChild($id_2);

$dom->appendChild($books);

//saveXML() method returns the XML in a String
print_r ($dom->saveXML());

Dadurch wird das folgende XML ausgegeben:

<?xml version="1.0" encoding="utf-8"?>
<books xmlns:ns="www.example.com/libraryns/1.0">
  <book>
    <name>PHP - An Introduction</name>
    <price>$5.95</price>
    <id version="1.0">1</id>
  </book>
  <ns:book>
    <ns:name><![CDATA[PHP - Advanced]]></ns:name>
    <ns:price>$25.00</ns:price>
    <ns:id>2</ns:id>
  </ns:book>
</books>

Lesen Sie ein XML-Dokument mit SimpleXML

Sie können XML aus einer Zeichenfolge oder aus einer XML-Datei analysieren

1. Aus einer Schnur

$xml_obj = simplexml_load_string($string);

2. Aus einer Datei

$xml_obj = simplexml_load_file('books.xml');

Beispiel für das Parsing

Berücksichtigen Sie folgendes XML:

<?xml version="1.0" encoding="UTF-8"?>
<books>
   <book>
      <name>PHP - An Introduction</name>
      <price>$5.95</price>
      <id>1</id>
   </book>
   <book>
      <name>PHP - Advanced</name>
      <price>$25.00</price>
      <id>2</id>
   </book>
</books>

Dies ist ein Beispielcode zum Analysieren

$xml = simplexml_load_string($xml_string);
$books = $xml->book;
foreach ($books as $book) {
    $id = $book->id;
    $title = $book->name;
    $price = $book->price;
    print_r ("The title of the book $id is $title and it costs $price." . "\n");
}

Dies wird ausgegeben:

Der Titel des Buches 1 lautet PHP - An Introduction und kostet $ 5,95.
Der Titel des Buches 2 ist PHP - Advanced und kostet $ 25,00.

Nutzung von XML mit der SimpleXML-Bibliothek von PHP

SimpleXML ist eine leistungsfähige Bibliothek, die XML-Strings in ein einfach zu verwendendes PHP-Objekt konvertiert.

Im Folgenden wird eine XML-Struktur wie folgt angenommen.

<?xml version="1.0" encoding="UTF-8"?>
<document>
    <book>
        <bookName>StackOverflow SimpleXML Example</bookName>
        <bookAuthor>PHP Programmer</bookAuthor>
    </book>
    <book>
        <bookName>Another SimpleXML Example</bookName>
        <bookAuthor>Stack Overflow Community</bookAuthor>
        <bookAuthor>PHP Programmer</bookAuthor>
        <bookAuthor>FooBar</bookAuthor>
    </book>
</document>

Lesen Sie unsere Daten in SimpleXML

Um zu beginnen, müssen wir unsere Daten in SimpleXML einlesen. Wir können dies auf drei verschiedene Arten tun. Erstens können wir unsere Daten von einem DOM-Knoten laden.

$xmlElement = simplexml_import_dom($domNode);

Unsere nächste Option ist das Laden unserer Daten aus einer XML-Datei.

$xmlElement = simplexml_load_file($filename);

Schließlich können wir unsere Daten aus einer Variablen laden.

$xmlString = '<?xml version="1.0" encoding="UTF-8"?>
<document>
    <book>
        <bookName>StackOverflow SimpleXML Example</bookName>
        <bookAuthor>PHP Programmer</bookAuthor>
    </book>
    <book>
        <bookName>Another SimpleXML Example</bookName>
        <bookAuthor>Stack Overflow Community</bookAuthor>
        <bookAuthor>PHP Programmer</bookAuthor>
        <bookAuthor>FooBar</bookAuthor>
    </book>
</document>';
$xmlElement = simplexml_load_string($xmlString);

Unabhängig davon, ob Sie aus einem DOM-Element , aus einer Datei oder aus einer Zeichenfolge geladen haben, wird jetzt die SimpleXMLElement-Variable $xmlElement . Jetzt können wir anfangen, unser XML in PHP zu verwenden.

Zugriff auf unsere SimpleXML-Daten

Der einfachste Weg, auf Daten in unserem SimpleXMLElement-Objekt zuzugreifen, besteht darin , die Eigenschaften direkt aufzurufen . Wenn Sie auf unser erstes bookName, StackOverflow SimpleXML Example , zugreifen möchten, können Sie wie unten beschrieben darauf zugreifen.

echo $xmlElement->book->bookName;

An dieser Stelle geht SimpleXML davon aus, dass wir, weil wir nicht explizit gesagt haben, welches Buch wir wollen, das erste wollen. Wenn wir jedoch entscheiden, dass wir nicht das erste wollen, sondern ein Another SimpleXML Example , können wir wie unten beschrieben darauf zugreifen.

echo $xmlElement->book[1]->bookName;

Es ist erwähnenswert, dass die Verwendung von [0] genauso funktioniert wie das Nicht-Verwenden von [0]

$xmlElement->book

funktioniert genauso wie

$xmlElement->book[0]

Durchlaufen Sie unser XML

Es gibt viele Gründe, warum Sie XML durchlaufen möchten, z. B. weil Sie eine Reihe von Elementen haben, in unserem Fall Bücher, die wir auf einer Webseite anzeigen möchten. Zu diesem Zweck können wir eine foreach-Schleife oder eine standardmäßige for-Schleife verwenden , um die Funktion count von SimpleXMLElement zu nutzen. .

foreach ( $xmlElement->book as $thisBook ) {
    echo $thisBook->bookName
}

oder

$count = $xmlElement->count();
for ( $i=0; $i<$count; $i++ ) {
    echo $xmlElement->book[$i]->bookName;
}

Fehler behandeln

Jetzt sind wir soweit, es ist wichtig zu wissen, dass wir nur Menschen sind und wahrscheinlich irgendwann einen Fehler finden werden - insbesondere, wenn wir ständig mit verschiedenen XML-Dateien spielen. Wir werden also mit diesen Fehlern umgehen wollen.

Angenommen, wir haben eine XML-Datei erstellt. Sie werden feststellen, dass diese XML zwar sehr ähnlich ist wie zuvor, das Problem bei dieser XML-Datei ist jedoch, dass das letzte schließende Tag / doc anstelle von / document ist.

<?xml version="1.0" encoding="UTF-8"?>
<document>
    <book>
        <bookName>StackOverflow SimpleXML Example</bookName>
        <bookAuthor>PHP Programmer</bookAuthor>
    </book>
    <book>
        <bookName>Another SimpleXML Example</bookName>
        <bookAuthor>Stack Overflow Community</bookAuthor>
        <bookAuthor>PHP Programmer</bookAuthor>
        <bookAuthor>FooBar</bookAuthor>
    </book>
</doc>

Nun, zum Beispiel, laden wir dies als $ -Datei in unsere PHP-Datei.

libxml_use_internal_errors(true);
$xmlElement = simplexml_load_file($file);
if ( $xmlElement === false ) {
    $errors = libxml_get_errors();
    foreach ( $errors as $thisError ) {
        switch ( $thisError->level ) {
            case LIBXML_ERR_FATAL:
                echo "FATAL ERROR: ";
                break;
            case LIBXML_ERR_ERROR:
                echo "Non Fatal Error: ";
                break;
            case LIBXML_ERR_WARNING:
                echo "Warning: ";
                break;
        }
        echo $thisError->code . PHP_EOL .
            'Message: ' . $thisError->message . PHP_EOL .
            'Line: ' . $thisError->line . PHP_EOL .
            'Column: ' . $thisError->column . PHP_EOL .
            'File: ' . $thisError->file;
    }
    libxml_clear_errors();
} else {
    echo 'Happy Days';
}

Wir werden mit dem folgenden begrüßt

FATAL ERROR: 76
Message: Opening and ending tag mismatch: document line 2 and doc

Line: 13
Column: 10
File: filepath/filename.xml

Sobald wir dieses Problem behoben haben, werden uns "Happy Days" präsentiert.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow