用正则表达式关闭打开的XML标记

时间:2010-08-12 15:10:00

标签: java xml regex

基本上我想和在Python中完成的here一样。 我想将所有自闭元素替换为长语法。

实施例

    <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 个答案:

答案 0 :(得分:1)

这可以用来替换一个标签(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");

答案 1 :(得分:1)

String resultHtml = inputHtml.replaceAll("(?six)<(\\w+)([^<]*?)/>", "<$1$2></$1>");

这将正确处理未<hr><img>

等终止的标记

答案 2 :(得分:1)

好的伙计们。我找到了一个解决方法。我把输出方法挂钩到这个html来自的xml,XSLT引擎负责为我关闭那些打开的标签。感谢您的回答,但如果您碰巧有问题的解决方案,请留下您的答案,我会将其标记为答案。这可能对其他人有用。