Este es un ejemplo muy simple para parsear ficheros XML con PHP usando libexpat, es decir
la libreria que probablemente ya tendremos soportada si PHP se compilo con la opcion --with-xml
El ejemplo esta sacado del php.net pero simplificado al maximo y explicando cada paso.
El modelo de parseo es tipo SAX, algo asi como un recorrido del fichero orientado
a eventos (empiezo elemento, cierro elemento, contenido,..).
El mecanismo consiste en crear una clase parseadora con funciones handler para esos eventos.

Veamos el código:
<?php

// Parsear ficheros XML con PHP usando la extension de PHP expat de James Clark
// El sistema es como SAX, nos hace definir funciones handler
// para leer el fichero XML. PHP debe estar compilado con la opcion --with-xml
// opcion comun por ejemplo en Debian.

// Funciones basicas que se van a utilizar:
//  1. parser= xml_parser_create() : es la que genera el parser inicial
//  2. xml_set_object(parser, objeto) : establece la clase parser
//  3. xml_set_element_handler(parser,funcion_inicio,funcion_fin) : establece los handlers
//  4. xml_set_character_data_handler(parser,funcion): establece el handler para los datos
//  5. xml_parse(parser, contenidos, [final]): inicia el parseo, se invocaran los handlers
//  6. xml_error_string(xml_get_error_code(parser)): con estas dos funciones sacamos el error
//  7. xml_get_current_line_number(parser): linea actual de trabajo
//  8. xml_parser_free(parser) : liberamos el parser

// Hay mas funciones, ver en el manual oficial "Funciones de intérprete XML"
// También hay otras librerías, por ejemplo para cargar XML con DOM


// Bien, para el parser lo primero es crear nuestra clase
class MiParserXML {

	// Atributos
   var $parser;
   var $ficheroxml;
   var $datos;

	// Constructora
   function MiParserXML($fichero)
   {
       $this->ficheroxml = $fichero;

   	// creamos el parser
      $this->parser = xml_parser_create();

		// Iniciamos...
		$this->inicializar();
    }

   // Inicializamos valores y funciones
   function inicializar() {
     // Establecemos el objeto parseador: this, o sea esta clase
     xml_set_object($this->parser, $this);
     // Establecemos los handlers para elementos y contenido
     xml_set_element_handler($this->parser, 'handlerInicial', 'handlerFinal');
     xml_set_character_data_handler($this->parser, 'handlerDatos');

   }

   function parseame() {

		// Abrimos el fichero XML en modo lectura
       if (!($fich = fopen($this->ficheroxml, 'r'))) {
           die('No pude abrir el fichero XML: '.$this->ficheroxml);
           return false;
       }

		// Vamos leyendo el fichero y parseando
       while ($data = fread($fich, 512)) {
           $resultado = xml_parse($this->parser, $data, feof($fich));

          // En caso de error
           if (!$resultado) {
               die(sprintf("Error de XML: %s en la linea %d",
                   xml_error_string(xml_get_error_code($this->parser)),
                       xml_get_current_line_number($this->parser) ) );
                       xml_parser_free($this->parser);
           }
       }

       return true;
   }

	/**
	* handlerDatos
	* Esta funcion se invoca automaticamente al encontrar una etiqueta
	*/
   function handlerInicial($parser, $nombre, $atributos) {
       echo "Iniciando elemento: " . $nombre . "<br>";
			foreach ($atributos as $clave => $valor) {
				echo "  atributos: " . $clave . ": " . $valor . "<br>";
			}

   }

	/**
	* handlerDatos
	* Esta funcion se invoca automaticamente al encontrar datos
   * es decir, el contenido que hay entre etiquetas
   * <etiqueta>contenido</etiqueta>
	*/
   function handlerDatos($parser, $dato)
   {
       if ($dato = trim($dato)) {
	        echo " Dato: " . $dato . "<br>";
       }
   }

      /**
	* handlerFinal
	* Esta funcion se invoca automaticamente al llegar al
	* cierre de una etiqueta
	*/
   function handlerFinal($parser, $nombre) {
       echo "Cerrando elemento: " . $nombre . "<br>";
   }

} // class


// Ahora vamos a probar nuestro parser
$miparser = new MiParserXML("datos.xml");
$miparser->parseame();

?>

Y este podría ser un fichero XML de ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<libro>
	<titulo>Neuromante</titulo>
	<autor>William Gibson</autor>
	<isbn>84-450-7405-9</isbn>
	<fecha edicion='2'>1985-12-4</fecha>
	<paginas>450</paginas>
</libro>
Como se puede ver el parser no hace mas que recorrer el fichero.
Para casos en los que ya sabemos las etiquetas que esperamos,
por ejemplo un rss es más que suficiente.