2011-09-01 82 views
2

方案檢查如果一個字符串是一個XML文檔

我需要編寫驗證XML標籤名稱的驗證函數(或屬性名稱)有效的標籤/屬性名稱。

例如:

  • "div"有效
  • "d<iv"無效
  • "d\iv"無效

如果字符串是無效的,我應該逃避,使得它無效,並用一些任意字符替換它們(或刪除它)。

例如:

  • "d<iv"是無效的 - >我"div"更換。

這些功能將被大量調用 - 所以我需要考慮代碼有效性

我的問題(一個或多個)

  • 什麼是描述一個有效的XML標籤的規則/屬性的名字嗎?考慮用與java變量名相同的規則來描述有效的XML標記/屬性是否安全?或者這些規則是否過於嚴格?
  • 我應該使用java正則表達式包還是應該編寫自己的專用方法? (正如我所說速度很重要)。
  • 你有什麼建議嗎?

謝謝!

回答

3

的規則是在XML規範中定義(看name定義)

如果速度問題,那麼就不要使用正則表達式。做到這一點更是這樣的:

public static String correctName(String name) { 
    StringBuilder nameBuilder = new StringBuilder(); 
    for (char nameChar:name.charArray()) 
    if (isValidXml(nameChar))   // some magic left to do ;) 
     nameBuilder.append(nameChar); 
    return nameBuilder.toString(); 
} 

注 - 上面的代碼是一個簡單的指引,它不包括小煩惱,一個XML名稱的第一個字符具有不同的值範圍...如果你想糾正像$%&div這樣的非法標籤,那麼它會更復雜一些(需要更多的魔法)

相關問題