String 如何在java中验证xml字符串?

String 如何在java中验证xml字符串?,string,validation,String,Validation,我在这里看到了一些示例,它们展示了如何验证正在工作的xml文件,但我的问题是:如何修改此代码以验证字符串 import javax.xml.XMLConstants; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.*; import org.xml.sax.ErrorHandler; import org.xml.sax.

我在这里看到了一些示例,它们展示了如何验证正在工作的xml文件,但我的问题是:如何修改此代码以验证字符串

import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import java.util.List;
import java.io.*;
import java.util.LinkedList;
import java.net.URL;
import java.sql.Clob;
import java.sql.SQLException;
public class Validate {  

    public String validaXML(){

        try {
         Source xmlFile = new StreamSource(new File("C:\\Users\\Desktop\\info.xml"));
         URL schemaFile = new URL("https://www.w3.org/2001/XMLSchema.xsd");
         SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
         Schema schema = schemaFactory.newSchema(schemaFile);
         Validator validator = schema.newValidator();
         final List exceptions = new LinkedList();
         validator.setErrorHandler(new ErrorHandler()
          {
          @Override
          public void warning(SAXParseException exception) throws SAXException
          {
           exceptions.add(exception);
          }
          @Override
          public void fatalError(SAXParseException exception) throws SAXException
          {
           exceptions.add(exception);
          }
          @Override
          public void error(SAXParseException exception) throws SAXException
          {
           exceptions.add(exception);
          }
          });

         validator.validate(xmlFile);

          } catch (SAXException ex) {
              System.out.println( ex.getMessage());
              return ex.getMessage().toString();

          } catch (IOException e) {
          System.out.println( e.getMessage());
          return e.getMessage().toString();
         }
        return "Valid";
    }

    public static void main(String[] args) {
        String res;
       Validate val = new Validate();
       res=val.validaXML();
        System.out.println(res);
    }
}
我试过这样做:

 Source xmlFile = new StreamSource("<Project><Name>sample</Name></Project>");
它可以编译,但我得到了:

无协议:样本


感谢您的阅读,我将感谢您的意见

这不起作用的原因是您使用的构造函数是StreamSourceString systemId。StreamSource上的字符串构造函数不接受xml

使用构造函数StreamSourceReader reader并生成一个读取器,例如

new StreamSource(new StringReader("xml here"))
或者您可以使用构造函数StreamSourceInputStream inputStream作为


这不起作用的原因是您使用的构造函数是StreamSourceString systemId。StreamSource上的字符串构造函数不接受xml

使用构造函数StreamSourceReader reader并生成一个读取器,例如

new StreamSource(new StringReader("xml here"))
或者您可以使用构造函数StreamSourceInputStream inputStream作为

这应该可以工作:new StreamSourcenew StringReader\u您的字符串\u此处这应该可以工作:new StreamSourcenew StringReader\u您的字符串\u此处