代码之家  ›  专栏  ›  技术社区  ›  user3111525

用regex关闭打开的XML标记

  •  5
  • user3111525  · 技术社区  · 14 年前

    基本上我想做的和 here 这是在python中完成的。 我想将所有自封闭元素替换为长语法。

    例子

        <iframe src="http://example.com/thing"/>
    

    变成

        <iframe src="http://example.com/thing"></iframe>
    

    完整例子:

     <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <link rel="stylesheet" type="text/css" href="/sample.css">
      <title></title>
      <script type="text/javascript" src="/swfobject.js">
                    //void
              </script>
      <script type="text/javascript" language="JavaScript" src="/generate.js">
    //void
      </script>
      <script type="text/javascript" language="JavaScript" src="/prototype.js">
    //void
      </script>
    </head>
    <body id="mediaPlayer" style="margin:0;padding:0;">
    <script type="text/javascript">
                                    swfobject.registerObject('id_G12564763');       
    
    
                    function getFlashObject() {
                            var object;
                            if (navigator.appName == 'Microsoft Internet Explorer' || navigator.userAgent.indexOf("Chrome")!=-1)
                            {
                                    object = document.getElementById('id_G12564763');
                            } 
                            else 
                            {
                                    object = document['flash_id_G12564763'];
                            }
                            return object;
                    }
    
            </script>
    </body>
    </html>
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Topera    14 年前

    这可以用来替换一个标记(JavaScript中的代码)。

    var becomes = "<iframe src='http://example.com/thing'/>".replace(/<(\w*) (.*)\//,'<$1 $2></$1')
    

    同样,在Java中。

    String becomes = "<iframe src=\"http://example.com/thing\"/>".replaceFirst("<(\\w*) (.*)\\/", "<$1 $2></$1");
    
        2
  •  1
  •   user3111525    14 年前

    好的,伙计们。我找到了一个解决办法。我将输出方法与XML挂钩,在XML中这个HTML来自XML,而XSLT引擎负责为我关闭那些打开的标记。谢谢你的回答,但如果你正好有一个问题的解决方案,请留下你的答案,我会把它标记为一个答案。这可能对其他人有用。

        3
  •  1
  •   Scott Evernden    14 年前
    String resultHtml = inputHtml.replaceAll("(?six)<(\\w+)([^<]*?)/>", "<$1$2></$1>");
    

    这将正确地处理未终止的标签,如 <hr> <img>