0

我有这段代码可以使用 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 需要指定的协议,对于文件来说很容易(文件:路径)。我怎样才能放一个变量而不是一个文件?

4

2 回答 2

1

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

于 2013-07-30T11:29:10.037 回答
1

您可以使用SAXSourceclass,它有一个带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);
于 2013-07-30T11:29:49.767 回答