2010-08-12 60 views
5

基本上我想要做的和在Python中完成的here一样。 我想将所有自闭元素替换为长语法。用正则表达式关闭开放的XML标记

<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> 
+0

请注意,http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454描述了这个操作的逆过程。 – Borealid 2010-08-12 15:12:10

+0

Borealid,我意识到这一点。你知道如何解决这个问题吗?据我所知,在使用解析器解析XML之前,XML必须格式良好。这正是我需要做的。我已经尝试了Tidy,但那不起作用,项目不再维护。这是一个小的html输出,它将简单地包含一系列javascript包含和对象嵌入标记(flash)。 – user3111525 2010-08-13 07:26:46

回答

1

玉家伙标签。我找到了一个解决方法。我将输出方法连接到了xml,这个html来自于XSLT引擎,并且负责为我打开这些打开的标签。感谢您的答案,但如果您碰巧遇到问题的解决方案,请留下您的答案,我会将其标记为答案。这可能对其他人有用。

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"); 
+0

Topera,我需要这个在java中。 – user3111525 2010-08-13 07:24:01

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

,这将妥善处理未终止像<hr><img>

+0

它没有工作斯科特。我用样本编辑了这个问题。 – user3111525 2010-08-13 07:15:03

+0

嗯..似乎为我工作虽然你的例子没有什么匹配我提供的正则表达式(即它没有自闭元素)。我调整了修改器,以便更正确地使用多行输入 - 这可能有助于... – 2010-08-13 16:42:59