如何使用XML输入变量以根据XSD进行验证

How to input a variable with XML to validate against XSD

本文关键字:XSD 验证 何使用 XML 输入 变量      更新时间:2023-09-26

我有这段代码来使用XSD验证XML文件。这个代码有效!

var schemaFile = new Packages.java.io.File("C:''schema.xsd");
var url = new Packages.java.net.URL("file:C:''input.xml");
var xmlFile = new Packages.javax.xml.transform.stream.StreamSource(url);
var schemaFactory = Packages.javax.xml.validation.SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
var schema = schemaFactory.newSchema(schemaFile);
var validator = schema.newValidator();
try {
    validator.validate(xmlFile);
    logger.info('valid');
} catch (err) {
    logger.error(err.toString());
}

但现在,不再使用XML文件作为输入

var xmlFile = new Packages.javax.xml.transform.stream.StreamSource(url);

我想使用一个之前传递的变量,其中有一个XML

var xmlFile = new Packages.javax.xml.transform.stream.StreamSource(msg);

我得到一个错误协议

JavaException: java.net.MalformedURLException: no protocol:

这是因为StreamSource需要一个指定的协议,对于文件来说很容易(文件:路径)。如何将变量而不是文件放在那里?

javax.xml.transform.stream.StreamSource可以从URL、InputStream或Reader构建。如果msg是您的xml。使用该字符串创建一个StringReader,并用它实例化StreamSource

您可以使用SAXSource类,它有一个接受InputSource参数的构造函数。

有一个InputSource构造函数接受Reader参数,因此您可以使用该构造函数并使用StringReader实现。

代码中:

var reader = new Packages.java.io.StringReader(msg);
var source = new Packages.org.xml.sax.InputSource(reader);
var xmlFile = new Packages.javax.xml.transform.sax.SAXSource(source);