Java中的XML验证-额外结束标记>;

Java中的XML验证-额外结束标记>;,java,xml,Java,Xml,我一直在尝试编写junit测试用例,以检查XML文件的语法,确保所有标记都已关闭,等等 我目前正在测试中使用dom解析器,因为它会对无效的XML抛出一个异常,但当我有一个额外的XML结束标记时,它就不起作用了 如果我有 private static final String OM_APPLICATION_STRG = "<abc>**>**\r\n" + "</abc>\r\n" + ""; private

我一直在尝试编写junit测试用例,以检查XML文件的语法,确保所有标记都已关闭,等等

我目前正在测试中使用dom解析器,因为它会对无效的XML抛出一个异常,但当我有一个额外的XML结束标记时,它就不起作用了 如果我有

 private static final String OM_APPLICATION_STRG = "<abc>**>**\r\n" + 
            "</abc>\r\n" + 
            ""; 
private static final String OM_应用程序\u STRG=“*********\r\n”+
“\r\n”+
""; 
而不是

private static final String OM_APPLICATION_STRG = "<abc>\r\n" + 
        "</abc>\r\n" + 
        "";    
私有静态最终字符串OM_应用程序\u STRG=“\r\n”+
“\r\n”+
"";    
请告诉我是否有任何其他方法来测试xml的有效性,包括额外的结束标记

一个“额外的结束标记”不是一个存在的概念。它只是XML文件中文本节点中的一个“大于”符号,拥有它们是完全有效的。您不需要在验证器中检查它们

例如,这是完全有效的xml:

<?xml version="1.0"?>

<xml>></xml>

>
不存在“额外结束标记”的概念。它只是XML文件中文本节点中的一个“大于”符号,拥有它们是完全有效的。您不需要在验证器中检查它们

例如,这是完全有效的xml:

<?xml version="1.0"?>

<xml>></xml>

>

可能还有另一种方法——SchemaFactory

您可以为xml字符串定义一个.xsd文件,然后使用SchemaFactory通过.xsd文件验证xml字符串。 比如这个例子

   String xml = xmlFile.toString();
   try {
      URL schema = Resources.getResource("/XXX.xsd");
      Validator validator = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema").newSchema(schema)
            .newValidator();
      Source source = new StreamSource(new CharArrayReader(xml.toCharArray()));
      validator.validate(source);
   } catch (Exception e) {
      // the xml is not valid for your .xsd defination
   }

也许还有另一种方法——SchemaFactory

您可以为xml字符串定义一个.xsd文件,然后使用SchemaFactory通过.xsd文件验证xml字符串。 比如这个例子

   String xml = xmlFile.toString();
   try {
      URL schema = Resources.getResource("/XXX.xsd");
      Validator validator = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema").newSchema(schema)
            .newValidator();
      Source source = new StreamSource(new CharArrayReader(xml.toCharArray()));
      validator.validate(source);
   } catch (Exception e) {
      // the xml is not valid for your .xsd defination
   }
正则表达式

[\sa-zA-Z0-9\*]*
定义元素内部文本节点中允许的字符集

以下文件将验证

<?xml version="1.0"?>
<abc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="schema.xsd">
    hello ** world
</abc>
XML将不再根据架构进行验证

有关根据模式进行验证的信息,请参阅浪漫书呆子的回答

正则表达式

[\sa-zA-Z0-9\*]*
定义元素内部文本节点中允许的字符集

以下文件将验证

<?xml version="1.0"?>
<abc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="schema.xsd">
    hello ** world
</abc>
XML将不再根据架构进行验证


要根据模式进行验证,请参见RomanticNerd的回答。

我不确定您使用的是哪种解析器,但根据我的经验,JAVA DOM解析器对于垃圾XML来说非常不灵活,因此我认为可以安全地假设,如果DOM解析器没有抛出异常,文档是有效的XML标记。我不确定您使用的是哪种解析器,但根据我的经验,JAVA DOM解析器对于垃圾XML来说是非常不灵活的,因此我认为可以安全地假设,如果DOM解析器没有抛出异常,文档就是有效的XML标记。这将如何检测到大于符号的额外数据?(就像OP所问的)因为,它们在XML中不是无效的。这将如何检测大于符号的额外字符?(如OP所问)因为,它们在XML中不是无效的。谢谢。如果没有像一个额外的结束标记这样的概念,并且它是一个大于符号,那么当有一个额外的开始标记时,为什么会出现错误“这是因为小于symbol的开头和大于symbol的结尾是不同的。第一个小于字符以xml标记开头,不允许将小于标记作为xml标记名的一部分。但大于符号可以自由出现在文本节点内。谢谢。如果没有像一个额外的结束标记这样的概念,并且它是一个大于符号,那么当有一个额外的开始标记时,为什么会出现错误“这是因为小于symbol的开头和大于symbol的结尾是不同的。第一个小于字符以xml标记开头,不允许将小于标记作为xml标记名的一部分。但大于符号可以自由出现在文本节点内。