PHP Doku:: Creates a new SimpleXMLElement object - simplexmlelement.construct.html

Verlauf / Chronik / History: (2) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzXML-ManipulationSimpleXMLThe SimpleXMLElement classSimpleXMLElement::__construct

Ein Service von Reinhard Neidl - Webprogrammierung.

The SimpleXMLElement class

<<SimpleXMLElement::children

SimpleXMLElement::count>>

SimpleXMLElement::__construct

(PHP 5 >= 5.0.1)

SimpleXMLElement::__construct Creates a new SimpleXMLElement object

Beschreibung

public SimpleXMLElement::__construct() ( string $data [, int $options = 0 [, bool $data_is_url = false [, string $ns = "" [, bool $is_prefix = false ]]]] )

Creates a new SimpleXMLElement object.

Parameter-Liste

data

A well-formed XML string or the path or URL to an XML document if data_is_url is TRUE.

options

Optionally used to specify additional Libxml parameters.

data_is_url

By default, data_is_url is FALSE. Use TRUE to specify that data is a path or URL to an XML document instead of string data.

ns

is_prefix

Rückgabewerte

Returns a SimpleXMLElement object representing data.

Fehler/Exceptions

Produces an E_WARNING error message for each error found in the XML data and throws an exception if errors were detected.

Tipp

Use libxml_use_internal_errors() to suppress all XML errors, and libxml_get_errors() to iterate over them afterwards.

Beispiele

Hinweis:

Listed examples may include example.php, which refers to the XML string found in the first example of the basic usage guide.

Beispiel #1 Create a SimpleXMLElement object

<?php

include 'example.php';

$sxe = new SimpleXMLElement($xmlstr);
echo 
$sxe->movie[0]->title;

?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

PHP: Behind the Parser

Beispiel #2 Create a SimpleXMLElement object from a URL

<?php

$sxe 
= new SimpleXMLElement('http://example.org/document.xml'NULLTRUE);
echo 
$sxe->asXML();

?>

Siehe auch


4 BenutzerBeiträge:
- Beiträge aktualisieren...
zwilson at gulosolutions dot com
19.11.2009 19:16
SimpleXML does not correctly parse SOAP XML results if the result comes back with colons ‘:’ in a tag, like <soap:Envelope>. Why? Because SimpleXML treats the colon character ‘:’ as an XML namespace, and places the entire contents of the SOAP XML result inside a namespace within the SimpleXML object. There is no real way to correct this using SimpleXML, but we can alter the raw XML result a little before we send it to SimpleXML to parse.

All we have to do is use the preg_replace function to get rid of the colons in the SOAP response tags BEFORE you hand it off to SimpleXML, like so:

<?php
// SimpleXML seems to have problems with the colon ":" in the <xxx:yyy> response tags, so take them out
$xmlString = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response);
?>
uramihsayibok, gmail, com
17.08.2009 3:52
As I was filling out a bug report, I realized why (speculation here) the constructor is final: so that functions like simplexml_load_file and simplexml_load_string can work. I imagine the PHP-ized code looks something like

<?php

function simplexml_load_file($filename, $class_name = "SimpleXMLElement", $options = 0, $ns = "", $is_prefix = false) {
    return new
$class_name($filename, $options, true, $ns, $is_prefix);
}

?>

If we were to use a different $class_name and change the constructor's definition these functions wouldn't work.

There's no easy, sensible solution that keeps simplexml_load_file and simplexml_load_string.
alvaro at demogracia dot com
30.09.2008 10:42
A note about the undocumented parameters:

$ns (string): namespace prefix or URI
$is_prefix (bool): TRUE if $ns is a prefix, FALSE if it's a URI; defaults to FALSE

E.g.:

<?php
$xml_string
= '<xml xmlns:foo='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'>
<foo:bar>..................'
;

$a = new SimpleXMLElement($xml_string, NULL, FALSE, 'foo', TRUE);
$b = new SimpleXMLElement($xml_string, NULL, FALSE, 'uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882', FALSE);
?>

However, I don't know exactly what these parameters are used for. They don't seem to be of much help when dealing with namespaces :-?
tudor at culise dot net
20.11.2007 12:35
This class is extendable, but it's too bad that its constructor cannot be overriden (PHP says it's a final method). Thus the class should be wrapped using the delegation principle rather that extended.



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)