2013-07-30 25 views
0

我有这段代码来验证一个带有XSD的XML文件。而这个代码的作品!但是,现在的如何使用XML输入一个变量来验证XSD

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的特定协议,文件很容易(文件:路径)。我怎样才能放置一个变量而不是文件?

回答

1

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

+0

1为所使用的StreamSource – capzulu

1

您可以使用SAXSource class,它的构造函数采用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); 
+0

1为代码示例的答案 – capzulu