正则expression式来添加任何XML标签中的属性

我有格式良好的XML文件到stringvariables。 我想使用preg_replace来为每个xml标签添加一个定义的属性。

例如replace:

<tag1> <tag2> some text </tag2> </tag1> 

通过:

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

所以我基本上需要正则expression式来find任何开始标签和添加我的属性,但我是一个完整的正则expression式noob。

3 Solutions collect form web for “正则expression式来添加任何XML标签中的属性”

不要使用正则expression式来处理xml。 Xml不是一个正规的语言。 使用PHP的XML扩展代替:

 $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(); 

所有包含正则expression式的答案都会打破这个有效的xml,例如:

 <?xml version="1.0" encoding='UTF-8'?> <html> <head> <!-- <meta> ... </meta> --> <script>//<![CDATA[ function load() {document.write('<tt>Test</tt>');} //]]></script> <title><![CDATA[Fancy <<SiteName>> [with Breadcrumbs] > in > title]]></title> </head> <body onload="load()"> <input type="submit" value="multiline button text" /> </body> </html> 
 $xml_data = preg_replace("/<([^\/]+\w+)/", "<\\1 attr=\"myAttr\">", $xml_data); 

好的,对于那些阅读这些行,并仍然有兴趣使用正则expression式出于某种原因,这里是如何做到这一点:

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

但是,正如前面所讨论的那样,谨慎使用那个! 仅在XML源代码中使用它,您不会被破坏(请参阅soulmerge文章)

  • 引用XML。 单人或双人?
  • 如何正确引用本地XML模式文件?
  • string'3/18/09 10:16 PM'不是有效的AllXsd值
  • 在Android中使用自定义字体
  • 我可以在XPathexpression式中使用正则expression式吗?
  • 在Windows Forms C#应用程序中拥有configuration文件的最简单的方法
  • 从XML文档获取指定的节点值
  • 在Visual Studio IDE中使用XSD进行XMLvalidation
  • 用标记名称中的冒号parsingXML的PHP​​库?
  • 如何检查string是否是有效的XML元素名称?
  • 对cricinfo记分卡的htmlparsing