Uso de PHP para administrar los archivos XML del filtro de correo de GMail

Como GMail hizo posible importar y exportar los filtros de correo, me gustaría administrar los archivos XML que se exportan desde GMail utilizando un script PHP, ya que hay algunos problemas conocidos con la cantidad de caracteres en los filtros de búsqueda.

Encontré la función simplexml_load_file en PHP y realicé var_dump () en contra de la exportación realizada, pero ahora parece que no puedo acceder al espacio de nombres de las aplicaciones dentro del archivo XML generado.

Siguiendo varias páginas dentro del manual de PHP, creé este script muy simple para leer el XML, así puedo comenzar a procesar los filtros que ya creé. Desafortunadamente, parece que faltan las partes clave!

getNamespaces(true); foreach ($namespaces as $prefix => $ns) { $xml->registerXPathNamespace($prefix, $ns); } var_dump($xml); } else { die("Failed to open filter file"); } ?>

Esto devuelve estos datos (extracto)

 ["entry"]=> array(268) { [0]=> object(SimpleXMLElement)#3 (5) { ["category"]=> object(SimpleXMLElement)#271 (1) { ["@attributes"]=> array(1) { ["term"]=> string(6) "filter" } } ["title"]=> string(11) "Mail Filter" ["id"]=> string(45) "tag:mail.google.com,2008:filter:1284991916868" ["updated"]=> string(20) "2010-10-28T11:59:31Z" ["content"]=> object(SimpleXMLElement)#272 (0) { } } [1]=> object(SimpleXMLElement)#4 (5) { ["category"]=> object(SimpleXMLElement)#272 (1) { ["@attributes"]=> array(1) { ["term"]=> string(6) "filter" } } ["title"]=> string(11) "Mail Filter" ["id"]=> string(45) "tag:mail.google.com,2008:filter:1284991925003" ["updated"]=> string(20) "2010-10-28T11:59:31Z" ["content"]=> object(SimpleXMLElement)#271 (0) { } } 

Aquí hay un extracto del archivo XML que descargué hoy, utilizado para crear el resultado anterior:

  Mail Filters tag:mail.google.com,2008:filters:1284991916868,...,1287734777820 2010-10-28T11:59:31Z  My Name my@email.addr.es    Mail Filter tag:mail.google.com,2008:filter:1284991916868 2010-10-28T11:59:31Z        Mail Filter tag:mail.google.com,2008:filter:1284993579743 2010-10-28T11:59:31Z      

Otros verbos de “aplicaciones: propiedad” incluyen:

    

Jon,

Las mejores notas para vincular esto desde Facebook, nunca lo hubiera visto de otra manera y lo estaba haciendo EXACTAMENTE este ayer, para un servicio de google !! Creo que el uso de XPath es una pista falsa, déjame mostrarte cómo acceder a los elementos y con suerte te dará suficiente información para lo que quieres hacer.

Estás en las pistas correctas con $ xml-> getNamespaces () – pero no iteras allí, necesitas usar el espacio de nombres que deseas en el elemento padre que deseas. En primer lugar, debe trabajar solo en los elementos de entrada, ya que estos son la mayoría, también puede buclear y verificar si tiene el correcto:

 foreach($xml as $tag) { if($tag->getName() == "entry") { // awesome, do Cool Stuff (TM) here } } 

Ahora, tiene el elemento en la variable $ tag, y quiere las aplicaciones: elementos secundarios con espacio de nombres. Entonces haz esto:

 $tag->getChildren($namespaces['apps']); 

Cuando iteres sobre esa colección, verás la información que deseas.

HTH,

Lorna

Recientemente tuve un “problema” similar. Intentaba obtener la configuración de firma de correo electrónico de Google Apps. Así es como se ve la respuesta XML de Google:

 < ?xml version='1.0' encoding='UTF-8'?>  https://apps-apis.google.com/a/feeds/emailsettings/2.0/domain.com/user/signature 2012-08-31T15:22:03.067Z     

No pude obtener los atributos de las aplicaciones: propiedad usando SimpleXMLElement. Así es como finalmente lo resolví:

  // create SimpleXMLElement with XML input as string $xml = new SimpleXMLElement($feed); // get namespace from XML $namespaces = $xml->getNamespaces(true); // get children (using namespace) and attributes $appsProperty = $xml->children($namespaces['apps'])->attributes(); // attributes are now stored in array $appsProperty and can be accessed echo "Name: ".$appsProperty['name']; echo "Signature: ".$appsProperty['value'];