Regexp para agregar atributo en cualquier etiqueta xml

Tengo documentos xml bien formados en variables de cadena. Quiero usar preg_replace para agregar un atributo definido a cada etiqueta xml.

Por ejemplo, reemplazar:

  some text   

por:

   some text   

Así que básicamente necesito la expresión de expresiones regulares para encontrar las tags de inicio y agregar mi atributo, pero soy un novato de expresiones regulares completo.

No use expresiones regulares para trabajar en xml. Xml no es un lenguaje normal. Use las extensiones xml de php en su lugar:

 $xml = new SimpleXml(file_get_contents($xmlFile)); function process_recursive($xmlNode) { $xmlNode->addAttribute('attr', 'myAttr'); foreach ($xmlNode->children() as $childNode) { process_recursive($childNode); } } process_recursive($xml); echo $xml->asXML(); 

Todas las respuestas que contengan expresiones regulares romperán este xml válido, por ejemplo:

      <![CDATA[Fancy <<sitename>> [with Breadcrumbs] > in > title]]></sitename>      
 $xml_data = preg_replace("/<([^\/]+\w+)/", "<\\1 attr=\"myAttr\">", $xml_data); 

OK, para aquellos que leen estas líneas y todavía están interesados ​​en usar el modo regex por alguna razón, aquí está cómo hacerlo:

 $xml_data= preg_replace('/(<[A-Za-z0-9\-\_]+[^>]*)>/u','\1 attr="myAttr">',$xmlData); 

Pero, como se discutió anteriormente, ¡utilice ese con precaución! Úselo solo en fonts XML que sepa que no se romperán (vea la publicación de soulmerge al respecto)