【问题标题】:Closing open XML tags with regex使用正则表达式关闭打开的 XML 标记
【发布时间】:2011-03-29 00:06:30
【问题描述】:

基本上,我想和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>

【问题讨论】:

  • 请注意,stackoverflow.com/questions/1732348/… 描述了此操作的逆操作。
  • Borealid,我知道这一点。你知道如何用解析器解决这个问题吗?据我所知,在使用解析器解析之前,XML 必须格式正确。这正是我需要做的。我尝试过 Tidy,但没有奏效,该项目不再维护。这是一个小的 html 输出,将简单地包含一系列 javascript 包含和对象嵌入标记 (flash)。

标签: java xml regex


【解决方案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");

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      String resultHtml = inputHtml.replaceAll("(?six)<(\\w+)([^<]*?)/>", "<$1$2></$1>");
      

      这将正确处理未终止的标签,例如 &lt;hr&gt;&lt;img&gt;

      【讨论】:

      • Hmm .. 似乎对我有用,尽管您的示例没有与我提供的正则表达式匹配(即,它没有自封闭元素)。我调整了修饰符以更正确地处理多行输入 - 这可能会有所帮助...
      猜你喜欢
      • 2021-03-04
      • 2015-02-08
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      相关资源
      最近更新 更多