gpt4 book ai didi

java - 在 Java 中使用 RELAX NG 模式验证 xml 文件(IDE - Eclipse)

转载 作者:数据小太阳 更新时间:2023-10-29 02:27:44 25 4
gpt4 key购买 nike

我一直在尝试根据名为 bookNewRelax.rnc 的 .rnc 文件验证名为 bookNew.xml 的 xml 文件。

我经常遇到的错误是——

线程“main”中的异常 java.lang.IllegalArgumentException:没有实现指定模式语言的 SchemaFactory:http://relaxng.org/ns/structure/1.0可以加载 在 javax.xml.validation.SchemaFactory.newInstance(未知来源) 在 testRelax.main(testRelax.java:38)

为了避免这种情况,我在实例化SchemaFactory类的对象之前使用了一行代码,我认为这有助于解决这个问题。代码如下:-

System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory"); 
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);

我已将外部 jar - jing.jar 包含在我的项目中,但仍然抛出相同的异常。

我还导入了库 com.thaiopensource.*;它带有黄色下划线,表明它根本没有被使用过。我个人认为,是jar文件在这玩弄,不然为什么thaiopensource库一直用不上。

我在下面粘贴 java 文件。

导入java.io.*;导入 java.lang.management.ManagementFactory;导入 java.lang.management.ThreadMXBean;

导入 javax.xml.XMLConstants;导入 javax.xml.parsers.DocumentBuilder;导入 javax.xml.parsers.DocumentBuilderFactory;导入 javax.xml.parsers.ParserConfigurationException;导入 javax.xml.transform.dom.DOMSource;导入 javax.xml.validation.*;

导入 org.w3c.dom.Document;导入 org.xml.sax.SAXException;

导入 com.thaiopensource.*;

公共(public)课 testRelax {

/** Get CPU time in nanoseconds. */
public static long getCpuTime( ) {
ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
return bean.isCurrentThreadCpuTimeSupported( ) ?
bean.getCurrentThreadCpuTime( ) : 0L;
}

/** Get user time in nanoseconds. */
public static long getUserTime( ) {
ThreadMXBean bean = ManagementFactory.getThreadMXBean( );
return bean.isCurrentThreadCpuTimeSupported( ) ?
bean.getCurrentThreadUserTime( ) : 0L;
}



public static void main(String args[]) throws SAXException, IOException, ParserConfigurationException {

System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory");
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);

File schemaLocation = new File("C:/Users/gp85943/workspace/TestBookRelax/src/bookNewRelax.rnc");
Schema schema = factory.newSchema(schemaLocation);
Validator validator = schema.newValidator();

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
File file=new File("C:/Users/gp85943/workspace/TestBookRelax/src/bookNew.xml");


try{

long startTime = System.currentTimeMillis();
System.out.println("Milli"+startTime);
long startUserTimeNano = getUserTime( );
System.out.println("Nano"+startUserTimeNano);
long startCPUTimeNano = getCpuTime( );
System.out.println("Nano"+startCPUTimeNano);

Document doc = builder.parse(new File("C:/Users/gp85943/workspace/TestBookRelax/src/bookNew.xml"));
DOMSource source = new DOMSource(doc);

validator.validate(source);

long stopTime = System.currentTimeMillis();
System.out.println("MilliStop"+stopTime);
long elapsedTime = stopTime - startTime;
System.out.println("Elapsed time"+elapsedTime);
//System.out.println("getUserTime--->"+getUserTime());
//System.out.println("getCpuTime--->"+getCpuTime());
//System.out.println("startUserTimeNano--->"+startUserTimeNano);
//System.out.println("startCPUTimeNano--->"+startCPUTimeNano);
long taskUserTimeNano = getUserTime( ) - startUserTimeNano;
System.out.println("User"+taskUserTimeNano);
long taskCpuTimeNano = getCpuTime( ) - startCPUTimeNano;
System.out.println("CPU"+taskCpuTimeNano);
System.out.println(file + " The document is valid");


}

catch(SAXException ex)
{
System.out.println("the document is not valid because--");
System.out.println(ex.getMessage());
}
}

请告诉我如何让我的 java 程序“接受”RELAX NG Compact Schema(或者简单的 .rng 也可以),以便可以完成正确的验证。感谢期待。

最佳答案

Java 实现不需要通过 SchemaFactory 实现 RELAX NG 验证。所以即使它在一个环境中工作,它也是不可移植的。从您的错误消息来看,您的特定 Java 实现似乎不支持它。

由于您拥有 Jing 库,您可以使用它们进行验证 - 请参阅文档 here开始。

关于java - 在 Java 中使用 RELAX NG 模式验证 xml 文件(IDE - Eclipse),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6321748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com