Daniel Schierbeck wrote:
I am having some problems with the XML features (I use the fancy new SimpleXML). It works like a dream when I'm retrieving information from an XML document, but when I want to insert new tags it screws up. I'm trying to create a function that saves error logs in an XML file, which should look like this:

    <?xml version='1.0' standalone='yes'?>
    <errors>
        <error>
            <number>2</number>
            <string>Could not bla bla</string>
            <file>filename.php</file>
            <line>56</line>
        </error>
        <error>
            <number>1</number>
            <string>Failed to bla bla</string>
            <file>filename2.php</file>
            <line>123</line>
        </error>
    </errors>

I tried to use SimpleXML myself and had some strange behavior, so I ended up switching to DOM. I was already basically familiar with DOM anyway from javascript so development went quickly. You should take a look: http://www.php.net/dom


There's more than one way to do it, of course, but code to add an element to this tree could look something like this:

<?php
  // load the existing tree
  $doc = new DOMDocument();
  $doc->load( "errors.xml" );

  // count the number of existing "error" nodes
  $errors_node = $doc->documentElement;
  $error_count = $errors_node->getElementsByTagName( "error" )->length;

  // create the new "error" node...
  $error_node = $doc->createElement( "error" );

  // ...and its children
  $number_node = $doc->createElement( "number", $error_count + 1 );
  $string_node = $doc->createElement( "string", "New error message" );
  $file_node   = $doc->createElement( "file",   "foo.php" );
  $line_node   = $doc->createElement( "line",   "32" );

  // add the children to the error node
  $error_node->appendChild( $number_node );
  $error_node->appendChild( $string_node );
  $error_node->appendChild( $file_node );
  $error_node->appendChild( $line_node );

  // add the new "error" node to the tree
  $doc->documentElement->appendChild( $error_node );

  // save back to the file
  $doc->save( "errors.xml" );
?>

-- Rick

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to