API16

API16:JXMLElement/asFormattedXML

From Joomla! Documentation

Description

Return a well-formed XML string based on SimpleXML element



Syntax

asFormattedXML($compressed=false, $indent="\t", $level=0)
Parameter Name Default Value Description
$compressed false $compressed Should we use indentation and newlines ?
$indent "\t" $level Indentaion level.
$level 0

Returns

string

Defined in

libraries/joomla/utilities/xmlelement.php

Importing

jimport( 'joomla.utilities.xmlelement' );

Source Body

public function asFormattedXML($compressed = false, $indent = "\t", $level = 0)
{
        $out = '';

        //-- Start a new line, indent by the number indicated in $level
        $out .=($compressed) ? '' : "\n".str_repeat($indent, $level);

        //-- Add a <, and add the name of the tag
        $out .= '<'.$this->getName();

        //-- For each attribute, add attr="value"
        foreach($this->attributes() as $attr) {
                $out .= ' '.$attr->getName().'="'.htmlspecialchars((string)$attr, ENT_COMPAT, 'UTF-8').'"';
        }

        //-- If there are no children and it contains no data, end it off with a />
        if( ! count($this->children())
        && !(string)$this)
        {
                $out .= " />";
        }
        else
        {
                //-- If there are children
                if(count($this->children()))
                {
                        //-- Close off the start tag
                        $out .= '>';

                        $level ++;

                        //-- For each child, call the asFormattedXML function (this will ensure that all children are added recursively)
                        foreach($this->children() as $child)
                        {
                                $out .= $child->asFormattedXML($compressed, $indent, $level);
                        }

                        $level --;

                        //-- Add the newline and indentation to go along with the close tag
                        $out .=($compressed) ? '' : "\n".str_repeat($indent, $level);
                }
                elseif((string)$this)
                {
                        //-- If there is data, close off the start tag and add the data
                        $out .= '>'.htmlspecialchars((string)$this, ENT_COMPAT, 'UTF-8');
                }

                //-- Add the end tag
                $out .= '</'.$this->getName().'>';
        }

        return $out;
}



Examples

Code Examples

Get the whole XML document or a part of it.

demo.xml

<jdoc>
	<doku kategory="Info">Wiki</doku>
</jdoc>

Get the whole XML document or a part of it.

<?php

$xml = JFactory::getXML('demo.xml');

echo '<pre>';
echo htmlentities($xml->asFormattedXML());
echo '</pre>';

Output:

<jdoc>
	<doku kategory="Info">Wiki</doku>
</jdoc>

Die "komprimierte" Ausgabe, z.B. zur Verwendung in Streams:

$xml->asFormattedXML(true)

Output:

<jdoc><doku kategory="Info">Wiki</doku></jdoc>

Output only a part of the document:

$xml->doku->asFormattedXML()

Output:

<doku kategory="Info">Wiki</doku>


Elkuku 11:26, 14 January 2011 (CST) Edit comment