Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中验证XML NCName_Java_Xml_Validation - Fatal编程技术网

在Java中验证XML NCName

在Java中验证XML NCName,java,xml,validation,Java,Xml,Validation,我从注释处理器中的Java注释中获取一些值来生成元数据。其中一些值应该表示XML元素或属性名称。我想验证输入,以确定根据XML规范提供的值是否实际上是合法的名称。在这种情况下,只有本地名称很重要,命名空间URI在这里不起作用 是否有一些简单的方法可以确定字符串是否是合法的XML元素或属性名?我最好使用一些JavaSE中现成的XMLAPI。我这么做的原因之一就是减少依赖性。我使用的是JDK 7,因此我可以访问最新的类/方法 到目前为止,浏览内容处理程序类和SAX/DOM之类的东西还没有产生任何结果

我从注释处理器中的Java注释中获取一些值来生成元数据。其中一些值应该表示XML元素或属性名称。我想验证输入,以确定根据XML规范提供的值是否实际上是合法的名称。在这种情况下,只有本地名称很重要,命名空间URI在这里不起作用

是否有一些简单的方法可以确定字符串是否是合法的XML元素或属性名?我最好使用一些JavaSE中现成的XMLAPI。我这么做的原因之一就是减少依赖性。我使用的是JDK 7,因此我可以访问最新的类/方法


到目前为止,浏览内容处理程序类和SAX/DOM之类的东西还没有产生任何结果。

在任何jdk 6 API中都没有发现任何直接的内容(不知道jdk 7)。一种快速但可能是“黑客式”的检查方法是将其转换为xml文档,并查看其是否解析:

String name = ...;
if(name.contains(">")) {
  return false;
}
String xmlDoc = "<" + name + "/>";
DocumentBuilder db = ...;
db.parse(new InputSource(new StringReader(xmlDoc)));
字符串名=。。。;
if(name.contains(“>”){
返回false;
}
字符串xmlDoc=”“;
DocumentBuilder数据库=。。。;
parse(新的InputSource(新的StringReader(xmlDoc));

如果您准备让Saxon进入您的类路径,您可以这样做

新名称10checker().isValidNCName


在公共JDK接口中,我看不到任何更简单的东西。

我遇到了同样的问题,在foss库中发现了许多实现,甚至在Java类库中发现了一个旧的实现,它早就被删除了。。。因此,这里有几个选项可供选择:

  • Java类库:(注:2004年)
  • Apache Axis:
  • 萨克森卡:
  • OWL API:
  • Validator.nu HTML解析器:
所以,如果你正在使用这些库中的一个,你就没事了


由于我不是,我将使用来自OWL API的XMLUtils副本,它没有外部依赖性,在非限制性许可证(LGPL和Apache 2.0)下可用,并且由漂亮而干净的代码组成。

尽管Saxon看起来像是一个优秀的XSLT处理器(就在今天,它哀叹XSLT 2.0支持如此之少),我宁愿按照用户的决定使用JAXP工厂。我猜对于注释处理器来说,这并不重要。我会看一下许可证的详细信息,也许会发现我是否可以合并那些我需要的类。谢谢顺便说一句,你书中关于门钦族分组的条目对今天的一位同事有很大帮助。如果可以的话,我会多加一分:)我也想到了这一点。不过这有点笨手笨脚。由于注释处理器有一个快速的“IDE”模式和一个更彻底的“构建”模式,也许我可以在构建过程中这样做。它是独立于JAXP实现的,所以我喜欢这个解决方案。用于通过JDOM验证用户提供的XPath表达式,如下所示。谢谢你的建议。事实上,我会选择这个解决方案。它足够紧凑,不会太具侵略性。我希望其中一个XMLAPI能够公开一些用于验证名称的接口方法,但这可能是最不全面的方法。只要它禁止错误的构建,它就会达到它的目的。毕竟,注释是为我们自己的开发团队准备的,我想他们不会试图用古怪的名称破坏元数据。