2010-08-12 42 views
5

Về cơ bản tôi muốn làm giống như here được thực hiện bằng Python. Tôi muốn thay thế tất cả các thành phần tự đóng thành cú pháp dài.Đóng các thẻ XML mở bằng regex

Ví dụ

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

trở thành

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

Full dụ:

<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

Lưu ý rằng http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 mô tả nghịch đảo của thao tác này. – Borealid

+0

Borealid, tôi biết điều đó. Bạn có biết cách sửa lỗi này bằng trình phân tích cú pháp không? Theo như tôi nhớ, XML phải được định dạng tốt trước khi phân tích nó bằng một trình phân tích cú pháp. Đó chính là điều tôi cần làm. Tôi đã cố gắng Tidy, nhưng điều đó đã không làm việc và dự án không được duy trì nữa. Đây là một đầu ra html nhỏ mà chỉ đơn giản sẽ có một loạt các javascript bao gồm và thẻ nhúng đối tượng (flash). – user3111525

Trả lời

1

kẻ Ok. Tôi tìm thấy một cách giải quyết. Tôi nối phương thức đầu ra vào xml nơi html này xuất phát và công cụ XSLT xử lý việc đóng các thẻ mở đó cho tôi. Cảm ơn câu trả lời, nhưng nếu bạn xảy ra để có một giải pháp cho pls vấn đề, để lại câu trả lời của bạn và tôi sẽ đánh dấu nó như là một câu trả lời. Điều này có thể hữu ích cho người khác.

1

này có thể được sử dụng để thay thế một thẻ (mã trong javascript).

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

Tương tự, trong Java.

String becomes = "<iframe src=\"http://example.com/thing\"/>".replaceFirst("<(\\w*) (.*)\\/", "<$1 $2></$1"); 
+0

Topera, tôi cần điều này trong java. – user3111525

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

và điều này sẽ xử lý đúng đắn thẻ mà không phải là chấm dứt như <hr><img>

+0

Nó không hoạt động Scott. Tôi đã chỉnh sửa câu hỏi bằng một mẫu. – user3111525

+0

Hmm .. dường như có tác dụng đối với tôi, ví dụ của bạn không có gì khớp với regexp i được cung cấp (nghĩa là nó không có các phần tử tự đóng). Tôi đã điều chỉnh công cụ sửa đổi để hoạt động chính xác hơn với đầu vào nhiều dòng - điều này có thể giúp ... –

Các vấn đề liên quan