Java中的XML验证-额外结束标记>;
我一直在尝试编写junit测试用例,以检查XML文件的语法,确保所有标记都已关闭,等等 我目前正在测试中使用dom解析器,因为它会对无效的XML抛出一个异常,但当我有一个额外的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
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标记名的一部分。但大于符号可以自由出现在文本节点内。