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

标签 java xml regex

场景

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

例如:

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

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

例如:

  • "d<iv"无效 -> 我将其替换为 "div" .

这些函数将被大量调用 - 因此我需要考虑代码有效性

我的问题

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

谢谢!

最佳答案

规则在 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 那么它有点复杂(需要更多魔法)

关于java - 检查字符串是否是 XML 文档的有效标记/属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7272253/

相关文章:

java - 在 Java 或 Google Guava 中具有弱值的简单线程安全 Java HashMap ?

Java 类未找到异常

java - 使用不同类型的参数设计服务java

java - 更新android studio 3.0.1时发现安装区有一些冲突

java - Elasticsearch 堆大小问题/内存不足问题

ios - Xcode Storyboard XML 标签含义

java - 使用 xml 配置的 spring bean 类中的 DAO null

python - 从Python中的多行字符串解析消息

regex - 为什么这个正则表达式很慢?

json - 以正确的 JSON 格式将 ansible 任务的输出写入文件