gpt4 book ai didi

java - 如何使用 RELAX NG 模式和 JAXP 验证 XML 文档?

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:10 24 4
gpt4 key购买 nike

我想使用 RELAX NG 模式验证 XML 文档,我想使用 the JAXP validation API .

通过谷歌搜索,我似乎可以使用 JingISO RELAX JARV to JAXP Bridge .不幸的是,将两者都添加到我的类路径后,我无法让它工作。 SchemaFactory 只是在尝试实例化工厂时抛出 IllegalArgumentException — 我查看了 SchemaFactory,显然是 SchemaFactoryFinder 返回空结果。

因此,我希望能回答以下任一问题:

  • 我怎样才能让 Jing 和这座桥一起工作?
  • 我应该尝试一组更好/不同的库吗?

我需要它来使用 Java 5 和 Java 6。

谢谢!

最佳答案

我通过以下行在 Java 1.6 上解决了这个错误:

// Specify you want a factory for RELAX NG "compact"
System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory");

SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);

这允许我使用 Jing 来根据 Compact RELAX NG 模式验证 XML 文档。下面的完整示例。我没有使用桥梁或其他任何东西。运行时类路径只有jing.jar(20091111)和我自己的Validator类。

import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

public class Validate
{

public static void main(String[] args) throws SAXException, IOException
{
// Specify you want a factory for RELAX NG
System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory");
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);

// Load the specific schema you want.
// Here I load it from a java.io.File, but we could also use a
// java.net.URL or a javax.xml.transform.Source
File schemaLocation = new File(args[0]);

// Compile the schema.
Schema schema = factory.newSchema(schemaLocation);

// Get a validator from the schema.
Validator validator = schema.newValidator();

for (int i = 1; i < args.length; i++)
{
String file = args[i];

// Check the document
try
{
validator.validate(new StreamSource(new File(file)));
System.out.println(file + " is valid.");
}
catch (SAXException ex)
{
System.out.print(file + " is not valid because: " + ex.getMessage());
}
}
}

}

再说一次,我只测试了这个 ion Java 1.6。

$ java -version
java version "1.6.0_01"
Java(TM) SE Runtime Environment (build 1.6.0_01-b06)
Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing)

关于java - 如何使用 RELAX NG 模式和 JAXP 验证 XML 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541253/

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