- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想使用 RELAX NG 模式验证 XML 文档,我想使用 the JAXP validation API .
通过谷歌搜索,我似乎可以使用 Jing和 ISO RELAX JARV to JAXP Bridge .不幸的是,将两者都添加到我的类路径后,我无法让它工作。 SchemaFactory
只是在尝试实例化工厂时抛出 IllegalArgumentException
— 我查看了 SchemaFactory
,显然是 SchemaFactoryFinder
返回空结果。
因此,我希望能回答以下任一问题:
我需要它来使用 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/
想象一个 xml 文件,它使用 noNamespaceSchemaLocation 引用架构。 我想在解析期间使用某种解析技术(例如用于解析架构包含的 ResourceResolver)动态解析 no
有什么区别吗 DocumentBuilder.parse(InputStream) 和 DocumentBuilder.parse(InputSource) ? 我只能发现对于第一种情况,解析器会从流
Transformer 方法转换的签名是 void transform(Source xmlSource,Result outputTarget)throws TransformerException
我正在尝试从 android(java) 中的 xml 文档中检索一个节点。 XPATH config:Manifest/config:Text[@config:name='site
我有一个像这样的 XML: john 20 20 kayla female 20
在使用 Xerces 验证 XML 文档时,它会尝试访问 w3c.org 中的互联网资源。我的应用程序需要离线/在防火墙后面工作,因此抛出异常。 有解决办法吗? ps。此链接提供了一些见解,但没有解决
我有一个 Tomcat 5.5 Web 应用程序,它使用 Apache Commons-Configuration 库在运行时生成 XML 配置文件。 Commons-Configuration 反过
我想提供有关正在使用的 JAXP 实现以及从哪个 JAR 文件加载它的诊断信息。 实现此目的的一种方法是在例如 DocumentBuilderFactory 的实例中创建,然后检查该类的属性: pri
有人知道在底层 POJO 上运行的标准 javax.xml.transform.Source 和 javax.xml.transform.Result 的实现吗? 换句话说,我想使用 XSLT 将一个
我正在动态生成一个需要在运行时针对架构进行验证的文档。我遇到的问题是文档的结构是正确的,但每个级别的元素顺序不正确。有没有办法告诉转换器按照 xsd 文件指定的顺序写出元素?或者我是否必须解析 xsd
我遇到一种情况,我们想要根据文件系统中放置的 XSD 来验证作为字节流保存在内存中的 XML 文档。我们希望避免在 XML 文件中明确提及文件名,而是告诉 XML 解析器使用一个或多个 XSD 文件的
我有一个引用了 dtd 文件的 xml 文件。 ... 我设法用 JAXP 读取这个文件,但前提是 referenced.dtd 与 xml 文件位于同一文件夹中。否则我会收到无法加载 dtd 文
我想通过 DocumentBuilder 中完成的验证提供我自己的消息,而不是来自 XMLMessages.properties 的消息。 现在我看到一个属性 error-reporter需要设置为扩
javax.xml.soap.MessageFactory是否可以重用? IE。 msgFactory = MessageFactory.newInstance(); 我可以缓存 msgFactory
HTML5 规范中是否存在无法使用 JAXP 等 XML 库创建的元素?一个例子是未在 XML 中定义的命名 HTML 实体。还有其他不兼容的地方吗? 最佳答案 JAXP 显然只适用于格式良好的 XM
我在使用 XSLT 转换的 Java 应用程序下工作。我在其中有很多 document() 调用,所以可能有 java.lang.OutOfMemory 异常(我实际上有),因为在每次调用 docum
我想知道在使用Java API for XML处理时,哪些对象可以被重用(在相同或不同的文档中),JAXP: DocumentBuilderFactory DocumentBuilder XPath
JAXP 和 JAXB 有什么区别? 最佳答案 JAXP(用于 XML 处理的 Java API)是一个相当过时的总称,涵盖了 JavaSE 中的各种低级 XML API,例如 DOM、SAX 和 S
我想读取一个可能很大的 XML 文件。为了内存效率和易于处理,我想使用 StAX 和 DOM 的混合,如所述 here . 我的输入如下所示(它是 OSM ) .
(问题已更新,见下文) 在 Java 7 上,我使用 JAXP 来解析 XML。 令人惊讶的是,在 XML 模式验证期间,内置实现 xerces 发出 http 请求以解决某些问题(该请求失败)。 问
我是一名优秀的程序员,十分优秀!