mirror of
https://github.com/php/doc-de.git
synced 2026-03-25 15:52:10 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/de/trunk@290488 c90b9560-bf6c-de11-be94-00142212c4b1
384 lines
10 KiB
XML
384 lines
10 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: af4410a7e15898c3dbe83d6ea38246745ed9c6fb Maintainer: sammywg Status: ready -->
|
|
|
|
<chapter xml:id="simplexml.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
&reftitle.examples;
|
|
<section xml:id="simplexml.examples-basic">
|
|
<title>Einfache Anwendung</title>
|
|
<para>
|
|
Viele Beispiele in dieser Referenz benötigen einen XML-String. Anstatt
|
|
diesen String in jedem Beispiel zu wiederholen, haben wir ihn als File
|
|
abgelegt, das wir in den Beispielen inkludieren. Diese eingebundene Datei
|
|
zeigen wir Ihnen im folgenden Beispiel. Alternativ dazu können Sie ein
|
|
XML-Dokument erstellen und es mit <function>simplexml_load_file</function>
|
|
einlesen.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Einzubindende Datei example.php mit XML-String</title>
|
|
<programlisting role="php" xml:id="simplexml.examples.movie">
|
|
<![CDATA[
|
|
<?php
|
|
$xmlstr = <<<XML
|
|
<?xml version='1.0' standalone='yes'?>
|
|
<movies>
|
|
<movie>
|
|
<title>PHP: Behind the Parser</title>
|
|
<characters>
|
|
<character>
|
|
<name>Ms. Coder</name>
|
|
<actor>Onlivia Actora</actor>
|
|
</character>
|
|
<character>
|
|
<name>Mr. Coder</name>
|
|
<actor>El ActÓr</actor>
|
|
</character>
|
|
</characters>
|
|
<plot>
|
|
So, this language. It's like, a programming language. Or is it a
|
|
scripting language? All is revealed in this thrilling horror spoof
|
|
of a documentary.
|
|
</plot>
|
|
<great-lines>
|
|
<line>PHP solves all my web problems</line>
|
|
</great-lines>
|
|
<rating type="thumbs">7</rating>
|
|
<rating type="stars">5</rating>
|
|
</movie>
|
|
</movies>
|
|
XML;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Die Einfachheit von SimpleXML ist besonders deutlich erkennbar, wenn man
|
|
einen String oder eine Zahl aus einem XML Dokument extrahieren will.
|
|
<example>
|
|
<title><literal><plot></literal> ermitteln</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?php
|
|
include 'example.php';
|
|
|
|
$xml = new SimpleXMLElement($xmlstr);
|
|
|
|
echo $xml->movie[0]->plot; // "So this language. It's like..."
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
Um auf Elemente in einem XML-Dokument zuzugreifen, die Zeichen enthalten,
|
|
die nicht dem PHP-Benennungsstandard entsprechen (z.B. der Bindestrich),
|
|
können Sie den Elementnamen zwischen geschweifte Klammern und
|
|
einfachen Anführungszeichen einschließen.
|
|
<example>
|
|
<title>Auf <literal><line></literal> zugreifen</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'example.php';
|
|
|
|
$xml = new SimpleXMLElement($xmlstr);
|
|
|
|
echo $xml->movie->{'great-lines'}->line; // "PHP solves all my web problems"
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Auf nicht-eindeutige Elemente per SimpleXML zugreifen</title>
|
|
<simpara>
|
|
Existieren mehrere Instanzen eines Elements als Kinder eines einzigen
|
|
Elternelements, lassen sich normale iterative Techniken einsetzen.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'example.php';
|
|
|
|
$xml = new SimpleXMLElement($xmlstr);
|
|
|
|
/* Für jeden <movie> Knoten geben wir ein separates <plot> aus. */
|
|
foreach ($xml->movie as $movie) {
|
|
echo $movie->plot, '<br />';
|
|
}
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Attribute verwenden</title>
|
|
<simpara>
|
|
Bis jetzt haben wir nur das Auslesen von Elementnamen und ihrer Werte
|
|
betrachtet. SimpleXML kann aber auch auf die Attribute eines Elements
|
|
zugreifen. Der Zugriff auf die Attribute eines Elements funktioniert
|
|
genauso, als würden Sie die Elemente eines <type>Array</type>
|
|
ansprechen.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'example.php';
|
|
|
|
$xml = new SimpleXMLElement($xmlstr);
|
|
|
|
/* Zugriff auf die <rating> Knoten des ersten Films
|
|
* Die Bewertungsskala wird zusätzlich ausgegeben. */
|
|
foreach ($xml->movie[0]->rating as $rating) {
|
|
switch((string) $rating['type']) { // Verwende Attribute als Element-Indizes
|
|
case 'thumbs':
|
|
echo $rating, ' thumbs up';
|
|
break;
|
|
case 'stars':
|
|
echo $rating, ' stars';
|
|
break;
|
|
}
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Vergleichen von Elementen und Attributen mit Text</title>
|
|
<simpara>
|
|
Um ein Element oder ein Attribut mit einem String zu vergleichen oder an
|
|
eine Funktion zu übergeben, die einen String als Parameter benötigt,
|
|
müssen Sie das Element respektive das Attribut in einen String casten.
|
|
Verwenden Sie dafür <literal>(string)</literal>, ansonsten behandelt PHP
|
|
das Element als Objekt.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'example.php';
|
|
|
|
$xml = new SimpleXMLElement($xmlstr);
|
|
|
|
if ((string) $xml->movie->title == 'PHP: Behind the Parser') {
|
|
print 'Mein Lieblingsfilm.';
|
|
}
|
|
|
|
htmlentities((string) $xml->movie->title);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Zwei Elemente vergleichen</title>
|
|
<simpara>
|
|
Zwei SimpleXMLElements können ab PHP 5.2.0 auch dann als unterschiedlich
|
|
betrachtet werden, wenn sie auf das gleiche Element zeigen.
|
|
</simpara>
|
|
<programlisting role="php"><![CDATA[
|
|
<?php
|
|
$el1 = new SimpleXMLElement($xmlstr);
|
|
$el2 = new SimpleXMLElement($xmlstr);
|
|
var_dump($el1 == $el2); // false ab PHP 5.2.0
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>XPath verwenden</title>
|
|
<simpara>
|
|
SimpleXML verfügt über einen eingebauten <acronym>XPath</acronym>-Support. So
|
|
finden Sie alle <literal><character></literal> Elemente:
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'example.php';
|
|
$xml = new SimpleXMLElement($xmlstr);
|
|
|
|
foreach ($xml->xpath('//character') as $character) {
|
|
echo $character->name, 'gespielt von ', $character->actor, '<br />';
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<simpara>
|
|
'<literal>//</literal>' wird hier als Wildcard verwendet. Um absolute
|
|
Pfadangaben zu verwenden, lassen Sie einen der Slashe weg.
|
|
</simpara>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Werte setzen</title>
|
|
<simpara>
|
|
Die Daten in SimpleXML müssen nicht konstant sein. Das Objekt erlaubt
|
|
die Veränderung all seiner Elemente.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'example.php';
|
|
$xml = new SimpleXMLElement($xmlstr);
|
|
|
|
$xml->movie[0]->characters->character[0]->name = 'Miss Coder';
|
|
|
|
echo $xml->asXML();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<simpara>
|
|
Der vorstehende Code erzeugt ein neues XML-Dokument gleich dem Original,
|
|
mit der Ausnahme, dass das neue XML von Ms. Coder auf Miss Coder verändert
|
|
wurde.
|
|
</simpara>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Elemente und Attribute hinzufügen</title>
|
|
<simpara>
|
|
Seit PHP 5.1.3 verfügt SimpleXML über eine vereinfachte Möglichkeit,
|
|
Kindelemente und Attribute hinzuzufügen.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
include 'example.php';
|
|
$xml = new SimpleXMLElement($xmlstr);
|
|
|
|
$character = $xml->movie[0]->characters->addChild('character');
|
|
$character->addChild('name', 'Mr. Parser');
|
|
$character->addChild('actor', 'John Doe');
|
|
|
|
$rating = $xml->movie[0]->addChild('rating', 'PG');
|
|
$rating->addAttribute('type', 'mpaa');
|
|
|
|
echo $xml->asXML();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<simpara>
|
|
Die obige Code gibt ein XML-Dokument aus, das auf dem Original basiert,
|
|
aber einen neuen Charakter und ein weiteres Rating enthält.
|
|
</simpara>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>DOM Interoperabilität</title>
|
|
<simpara>
|
|
PHP hat einen Mechanismus, um XML-Knoten zwischen dem SimpleXML und dem
|
|
DOM Format zu konvertieren. Das Beispiel zeigt, wie man ein DOM Element
|
|
in SimpleXML verwandelt.
|
|
</simpara>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
$dom = new domDocument;
|
|
$dom->loadXML('<books><book><title>blah</title></book></books>');
|
|
if (!$dom) {
|
|
echo 'Fehler beim Parsen des Dokuments';
|
|
exit;
|
|
}
|
|
|
|
$s = simplexml_import_dom($dom);
|
|
|
|
echo $s->book[0]->title;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</section>
|
|
|
|
<section xml:id="simplexml.examples-errors">
|
|
<title>Behandlung von XML-Fehlern</title>
|
|
<para>
|
|
Die Behandlung von XML-Fehlern beim Laden von Dokumenten ist eine sehr
|
|
einfache Sache. Durch die Verwendung der <link
|
|
linkend="book.libxml">libxml</link>-Funktionalität ist es möglich, alle
|
|
XML-Fehlermeldungen beim Laden des Dokuments zu unterdrücken und danach
|
|
über die aufgetretenen Meldungen zu iterieren.
|
|
</para>
|
|
<para>
|
|
Das <classname>libXMLError</classname>-Objekt, das von
|
|
<function>libxml_get_errors</function> zurückgegeben wird, hat verschiedene
|
|
Eigenschaften. Dazu gehören <link
|
|
linkend="libxmlerror.props.message">message</link>, <link
|
|
linkend="libxmlerror.props.line">line</link> und <link
|
|
linkend="libxmlerror.props.column">column</link> (Position) des jeweiligen
|
|
Fehlers.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Laden eines defekten XML-Strings</title>
|
|
<programlisting role="php" xml:id="simplexml.examples.error">
|
|
<![CDATA[
|
|
<?php
|
|
libxml_use_internal_errors(true);
|
|
$sxe = simplexml_load_string("<?xml version='1.0'><broken><xml></broken>");
|
|
if (!$sxe) {
|
|
echo "Laden des XML fehlgeschlagen\n";
|
|
foreach(libxml_get_errors() as $error) {
|
|
echo "\t", $error->message;
|
|
}
|
|
}
|
|
]]>
|
|
</programlisting>
|
|
&example.outputs;
|
|
<screen>
|
|
<![CDATA[
|
|
Laden des XML fehlgeschlagen
|
|
Blank needed here
|
|
parsing XML declaration: '?>' expected
|
|
Opening and ending tag mismatch: xml line 1 and broken
|
|
Premature end of data in tag broken line 1
|
|
]]>
|
|
</screen>
|
|
</example>
|
|
</para>
|
|
|
|
<section role="seealso"><!-- {{{ -->
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><function>libxml_use_internal_errors</function></member>
|
|
<member><function>libxml_get_errors</function></member>
|
|
<member><xref linkend="class.libxmlerror" /></member>
|
|
</simplelist>
|
|
</para>
|
|
</section>
|
|
</section>
|
|
</chapter>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../../../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|