Nicola Moretti – Hanicker IT Blog

Formattazione Output XML con PHP

by Nick on gen.15, 2010, under Programming

Funzione molto utile per formattare il testo XML in uscita (ad esempio da DomDocument).

function formatXmlString($xml, $indentBase = 0, $indentString = ' ') {
// add marker linefeeds to aid the pretty-tokeniser (adds a linefeed between all tag-end boundaries)
$xml = preg_replace('/(>)(<)(\/*)/', "$1\n$2$3", $xml);
// now indent the tags
$token = strtok($xml, "\n");
$result = ''; // holds formatted version as it is built
$pad = ($indentBase > 0) ? $indentBase : 0; // initial indent
$matches = array(); // returns from preg_matches()
// scan each line and adjust indent based on opening/closing tags
while ($token !== false):
// test for the various tag states
// 1. open and closing tags on same line - no change
if (preg_match('/.+<\/\w[^>]*>$/', $token, $matches)):
$indent = 0;
// 2. closing tag - outdent now
elseif (preg_match('/^<\/\w/', $token, $matches)):
$pad--;
// 3. opening tag - don't pad this one, only subsequent tags
elseif (preg_match('/^<\w[^>]*[^\/]>.*$/', $token, $matches)):
$indent = 1;
// 4. no indentation needed
else:
$indent = 0;
endif;
// pad the line with the required number of leading spaces
$line = str_pad($token, strlen($token) + $pad, $indentString, STR_PAD_LEFT);
$result .= $line . "\n"; // add to the cumulative result, with linefeed
$token = strtok("\n"); // get the next token
$pad += $indent; // update the pad size for subsequent lines
endwhile;
return $result;
}

Tratta (e modificata) da recurser.com.

http://recurser.com/articles/2007/04/05/format-xml-with-php/
  • Facebook
  • Delicious
  • Twitter
  • StumbleUpon
  • Google Reader
  • Orkut
  • Google Bookmarks
  • MySpace
  • Slashdot
  • Technorati Favorites
  • Yahoo Bookmarks
  • LinkedIn
  • Blogger Post
  • Netlog
  • Tumblr
  • Digg
  • FriendFeed
  • Share/Bookmark

No related posts.

:, , , ,

Leave a Reply

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Blogroll

A few highly recommended websites...