当前位置: 首页 > 面试题库 >

正则表达式可在任何xml标记中添加属性

陆宝
2023-03-14
问题内容

我已经将格式良好的xml文档转换为字符串变量。我想使用preg_replace向每个xml标签添加定义的属性。

例如替换:

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

通过:

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

因此,我基本上需要regex表达式来查找任何开始标记并添加我的属性,但是我是一个完整的regex新手。


问题答案:

不要在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();

所有包含正则表达式的答案都将破坏此有效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>


 类似资料:
  • 我有一根绳子,看起来像这样:

  • 我有以下代码: 代码JS: 运行此代码后,具有以下形式 我想在最后一个括号前添加空格,如下例所示。 您能告诉我如何接受对代码的更改,以便保留空白吗? 提前感谢! 编辑: 我添加了这个代码来调用这里作为添加空白。。。

  • 我想验证输入的代码是否是HTML代码(必须以<代码> 我试着这么做 但是我有一个问题需要在代码中做一个\n,我需要验证第一个和结束标签(=

  • 问题内容: 我正在寻找一个正则表达式,可以从Java中的HTML片段中获取src(不区分大小写)标签。 问题答案: 一种可能性: 是可能的(如果不区分大小写地匹配)。这有点混乱,故意忽略了不使用引号的情况。要表示它而不必担心字符串转义: 这符合: 一个或多个不是的字符(即可能的其他属性) 可选空格 可选空格 或的起始定界符 图片来源 (可能不包含单引号或双引号) 结束定界符 尽管表达式可以在此处停

  • 问题内容: 我遇到过这种模式 并从http://gskinner.com/RegExr/站点了解到= =匹配字母数字字符和下划线,并且=匹配先前的令牌1次或多次(不确定确切的含义)。 如何将连字符添加到列表中? 我试过了但是没用,我没有任何匹配… 问题答案: 您需要一个字符类,用表示。然后可以在字符类中使用它,并可以添加更多字符: 不过请小心,如果您添加更多字符以进行匹配。连字符减号必须在类中的

  • 如果输入的文本与我的模式不匹配: 如果在输入的文本中找到\n字符,那么文本将不会被验证,但我想添加最小和最大长度到所有整个字符串。我希望如果文本不匹配的模式和字符串长度低于3和超过10,那么它将不会被验证,我知道下面的模式是不正确的,但至少我试图这样修改它: 对于示例: 有什么更正或建议吗?