2011-03-22 261 views
0

您好我想從使用Java我的HTML內容中刪除對象的標籤,這樣我可以呈現在設備上的HTML不支持Flash如何從使用Java

<object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1" width="100" height="50"> 
    <param name="BorderStyle" value="1" /> 
    <param name="MousePointer" value="0" /> 
    <param name="Enabled" value="1" /> 
    <param name="Min" value="0" /> 
    <param name="Max" value="10" /> 
</object> 
+0

你爲什麼要刪除它?你是否考慮過不要把它放在第一位(例如服務器端)呢? – 2011-03-22 09:42:00

+0

實際上這個內容在DB堅持,所以我不得不在屋裏刪除這些內容,包括標籤,這樣我可以用它來服務於移動/ iphone – dpsdce 2011-03-22 09:48:07

+2

原則上,每個HTML用戶代理應該忽略''元素它能」處理(而不是解釋他們的內容),所以刪除不應該是必要的。 – 2011-03-22 10:16:53

回答

0

我的HTML刪除對象標籤此正則表達式必須做的伎倆:

<\/?object(\s\w+(\=\".*\")?)*\> 
+0

此正則表達式是不是編譯爲Java String – dpsdce 2011-03-22 09:57:04

+1

@Dhirenda::-)你需要加倍和反斜槓將它作爲一個字符串文字(除了那些之前'「')不就得了,是一個正則表達式。 – 2011-03-22 10:13:23

0

你可以只使用Tagsoup(http://ccil.org/~cowan/XML/tagsoup/),這是一個XML解析器可以從HTML閱讀,即使格式不正確(不需要是xhtml或甚至不符合)。

然後,您可以使用XPath只是刪除所有的對象標籤。

這是一個比一個正則表達式,如果你想掌握所有的特殊情況是難以維持安全得多。

0

OBJECT HTML元素可以嵌套。由於Java不提供原生的正則表達式遞歸表達式,因此不能直接將最外層的OBJECT元素與單個正則表達式匹配。您可以,然而,制定一個正則表達式的最裏面OBJECT元素匹配,並重復,從「由內而外」替換它們,直到一個也不剩。下面是一個測試Java代碼這確實正是:

String regex = "<object\\b[^>]*>[^<]*(?:(?!</?object\\b)<[^<]*)*</object\\s*>"; 
String resultString = null; 
java.util.regex.Pattern p = java.util.regex.Pattern.compile(
      regex, 
      java.util.regex.Pattern.CASE_INSENSITIVE | 
      java.util.regex.Pattern.UNICODE_CASE); 
java.util.regex.Matcher m = p.matcher(subjectString); 
while (m.find()) 
{ // Iterate until there are no OBJECT elements. 
    resultString = m.replaceAll(""); 
    m = p.matcher(resultString); 
} 
System.out.println(resultString); 

注意事項:由於許多無疑會指出:「你不能用正則表達式解析HTML」 它們是正確的(如果您的解決方案必須在100%的時間內可靠地工作)。雖然上述解決方案將用於很多情況下工作,要知道,它有一定的侷限性,有一些事情可以絆倒它,即:

  1. "<OBJECT...>"開始或"</OBJECT>"結束標記可能不會出現在任何CDATA字符串,如SCRIPT或STYLE標記,或任何標記屬性或任何HTML註釋中。例如<p title="evil <OBJECT> attribute"><SCRIPT>alert("Bad <OBJECT> script here!");</SCRIPT><!-- <OBJECT> inside a comment -->
  2. 開始標記<OBJECT>的屬性中可能不包含任何尖括號。

這些特殊情況應該是非常罕見的,上面的代碼對於大多數(如果不是全部的話)HTML文件應該很好。