检查字符串是否是XML文档的有效标记/属性名称

时间:2011-09-01 15:00:54

标签: java xml regex

方案

我需要编写验证函数来验证XML标记名称(或属性名称)。

例如:

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

如果一个字符串无效,我应该转义它使它无效,并用一些任意字符替换它们(或删除它)。

例如:

  • "d<iv"无效 - &gt;我将其替换为"div"

这些功能将被大量调用 - 所以我需要考虑代码有效性

我的问题

  • 描述有效XML标记/属性名称的规则是什么?考虑使用与java变量名相同的规则描述的有效XML标记/属性是否安全?或者这些规则是否过于严格?
  • 我应该使用java regex包还是应该编写自己的专用方法? (正如我所说,速度很重要)。
  • 你有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分: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然后它有点复杂(需要更多魔法)