regexp to add attribute in any xml tags

regexp to add attribute in any xml tags  using -'php,xml,regex'

I have well-formed xml documents into string variables. I want to use preg_replace to add a defined attribute to every xml tags.

For example replace:

<tag2> some text </tag2>


<tag1 attr="myAttr">
<tag2 attr="myAttr"> some text </tag2>

So I basically need the regex expression to find any start tags and add my attribute, but I'm a complete regex noob.

asked Oct 19, 2015 by patelnikul321
0 votes

2 Answers

0 votes

Don't use regular expressions for working on xml. Xml is not a regular language. Use the xml extensions of php instead:

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

All answers containing regular expressions will break this valid xml, for example:

        <![CDATA[Fancy <<SiteName>> [with Breadcrumbs] > in > title]]>

answered Oct 19, 2015 by sandeep bhadauria
0 votes

OK, for those reading these lines and are still interested about using the regex way for some reasons, here is how to do it:

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

But, as discussed earlier, use that one with caution! Use it only on XML source that you know won't be broken (see soulmerge post about that)

answered Oct 19, 2015 by rajesh