在本文中,我们将为您详细介绍针对XSD架构的JavaXML验证的相关知识,并且为您解答关于javaxsdxml的疑问,此外,我们还会提供一些关于6、xsd验证xml文件的java代码、c#–使用嵌套X
在本文中,我们将为您详细介绍针对XSD架构的Java XML验证的相关知识,并且为您解答关于java xsd xml的疑问,此外,我们还会提供一些关于6、xsd验证xml文件的java代码、c# – 使用嵌套XSD架构的XML验证错误 – 未声明类型、c# – 如何使用xmlschemaset和xmlreader.create对xsd模式验证xml、java – 使用Spring WS发布静态WSDL和相关的XSD架构的有用信息。
本文目录一览:- 针对XSD架构的Java XML验证(java xsd xml)
- 6、xsd验证xml文件的java代码
- c# – 使用嵌套XSD架构的XML验证错误 – 未声明类型
- c# – 如何使用xmlschemaset和xmlreader.create对xsd模式验证xml
- java – 使用Spring WS发布静态WSDL和相关的XSD架构
针对XSD架构的Java XML验证(java xsd xml)
private void validateXML(DOMSource source) throws Exception {
URL schemaFile = new URL("http://www.csc.liv.ac.uk/~valli/modules.xsd");
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI);
Schema schema = schemaFactory.newSchema(schemaFile);
Validator validator = schema.newValidator();
DOMResult result = new DOMResult();
try {
validator.validate(source,result);
System.out.println("is valid");
} catch (SAXException e) {
System.out.println("not valid because " + e.getLocalizedMessage());
}
}
但是,这将返回一条错误消息:线程“
main”中的异常java.lang.IllegalArgumentException:无法加载实现由http://www.w3.org/2001/XMLSchema
-instance 指定的模式语言的SchemaFactory。
这是我的代码还是实际的xsd文件有问题?
6、xsd验证xml文件的java代码
package com; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import javax.xml.XMLConstants; import javax.xml.stream.FactoryConfigurationError; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.transform.source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.xml.sax.SAXException; public class validateXML { /** * XSD和XML文件放在工程的bin路径下 */ public static boolean validate(String schemaLocaltion,OMElement request) throws SAXException,IOException { // 获取Schema工厂类 // 这里的XMLConstants.W3C_XML_SCHEMA_NS_URI的值就是://http://www.w3.org/2001/XMLSchema SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); // 获取XSD文件,以流的方式读取到Source中 // XSD文件的位置相对于类文件位置 Source schemaSource = new StreamSource(new FileInputStream(schemaLocaltion)); Schema schema = factory.newSchema(schemaSource); // 这里是将一个DOM树对象转换成流对象,以便对DOM树对象验证 // 如果是对XML文件进行验证,用FileInputStream即可 String input = request.toString(); ByteArrayInputStream bais = new ByteArrayInputStream( input.getBytes("UTF-8")); // 获取验证器,验证器的XML Schema源就是之前创建的Schema Validator validator = schema.newValidator(); Source source = new StreamSource(bais); // 执行验证 try { validator.validate(source); return true; } catch (Exception ex) { ex.printstacktrace(); return false; } finally { bais.close(); } } /** * get OMElement soap request from specified XML file. * * @param request * @return * @throws FileNotFoundException * @throws XMLStreamException * @throws FactoryConfigurationError */ public static OMElement getRequest(String filePath) throws FileNotFoundException,XMLStreamException,FactoryConfigurationError { XMLStreamReader reader = XMLInputFactory.newInstance() .createXMLStreamReader( new FileInputStream(new File(filePath))); StAXOMBuilder builder = new StAXOMBuilder(reader); OMElement requestMessage = builder.getDocumentElement(); return requestMessage; } public static void main(String[] args) { try { if (validate("D:\\Documents\\2014.11work\\mzyw1.xsd",getRequest("D:\\Documents\\2014.11work\\mzyw1.xml"))) { System.out.println("customer_err.xml格式良好"); } else { System.out.println("customer_err.xml格式有误,请检查!"); } } catch (Exception ex) { ex.printstacktrace(); System.out.println("文件格式有误,请检查!"); } } }
c# – 使用嵌套XSD架构的XML验证错误 – 未声明类型
我使用嵌套的XSD架构来验证XML文档.导入的XSD使用自己的目标命名空间,我可以使用Liquid XML Studio验证下面给出的示例XML.但是当我使用下面的C#代码运行验证时,它会因类型声明错误而失败(见下文).我花了很多时间试图搞清楚,但没有运气:
主XSD架构(DataItem.xsd):
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:Datanumeric="Doc.Datanumeric" xmlns:DataYesNo="Doc.DataYesNo" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="Datanumeric.xsd" namespace="Doc.Datanumeric" />
<xs:import schemaLocation="DataYesNo.xsd" namespace="Doc.DataYesNo" />
<xs:complexType name="tDataItem">
<xs:choice>
<xs:element name="Datanumeric" type="Datanumeric:tDatanumeric" />
<xs:element name="DataYesNo" type="DataYesNo:tDataYesNo" />
</xs:choice>
</xs:complexType>
<xs:element name="DataItem" type="tDataItem" />
</xs:schema>
包含的XSD架构(Datanumeric.xsd):
**<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:Datanumeric="Doc.Datanumeric" elementFormDefault="qualified" targetNamespace="Doc.Datanumeric" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="tDatanumeric">
<xs:sequence>
<xs:element name="Answer" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:element name="Datanumeric" type="Datanumeric:tDatanumeric" />
</xs:schema>**
XML:
<DataItem>
<Datanumeric xmlns:Datanumeric="Doc.Datanumeric">
<Datanumeric:Answer>37.8</Datanumeric:Answer>
</Datanumeric>
</DataItem>
验证错误:
XmlSchemaValidationException:未声明类型“Doc.Datanumeric:tDatanumeric”.
C#验证码:
XDocument xDoc = XDocument.Parse(xxxxxxx);
string xsdpath = ConfigUtils.GetXsdpath(XsdSchemaIdentifier.HHDataItem);
FileStream fs = new FileStream(xsdpath, FileMode.Open);
XmlReader reader = XmlReader.Create(fs);
XmlSchemaSet xss = new XmlSchemaSet();
xss.Add("", reader);
fs.Close();
fs.dispose();
xDoc.Validate(xss, null);
解决方法:
在经历了令人沮丧的一天半的迭代之后,我发现了这个问题.更改:
FileStream fs = new FileStream(xsdpath, FileMode.Open);
XmlReader reader = XmlReader.Create(fs);
XmlSchemaSet xss = new XmlSchemaSet();
xss.Add("", reader);
至
XmlSchemaSet xss = new XmlSchemaSet();
xss.Add("", xsdpath);
解决了这个问题.但是我仍在寻找为什么回答?两者都是向架构集添加架构的有效方法(即2个重载).
c# – 如何使用xmlschemaset和xmlreader.create对xsd模式验证xml
// New Validation Xml. string xsd_file = filename.Substring(0,filename.Length - 3) + "xsd"; XmlSchema xsd = new XmlSchema(); xsd.sourceUri = xsd_file; XmlSchemaSet ss = new XmlSchemaSet(); ss.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); ss.Add(xsd); if (ss.Count > 0) { XmlTextReader r = new XmlTextReader(filename2); XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.Schemas.Add(ss); settings.ValidationEventHandler +=new ValidationEventHandler(ValidationCallBack); XmlReader reader = XmlReader.Create(filename2,settings); while (reader.Read()) { } reader.Close(); } // Old Validate XML XmlSchemaCollection sc = new XmlSchemaCollection(); sc.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); sc.Add(null,xsd_file); if (sc.Count > 0) { XmlTextReader r = new XmlTextReader(filename2); XmlValidatingReader v = new XmlValidatingReader(r); v.ValidationType = ValidationType.Schema; v.Schemas.Add(sc); v.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); while (v.Read()) { } v.Close(); } private void ValidationCallBack(object sender,ValidationEventArgs e) { // If Document Validation Fails isvalid = false; MessageConsole.Text = "INVALID. Check message and datagridview table."; richTextBox1.Text = "The document is invalid: " + e.Message; }
不幸的是,当我运行程序并尝试验证无效的xml文档时,它会给出一个如下错误:“未声明’URNLookup’元素.” URNLookup元素是xml文件的根元素.我总是可以回到旧的验证方法,但那些警告吓到了我.
任何帮助都非常感谢.先感谢您!如果我遗漏任何信息,我会很乐意提供更多信息.
> tf.rz(.NET 3.5 SP1,Visual Studio C#2008)
解决方法
在新验证XML中:
// New Validation Xml. string xsd_file = filename.Substring(0,filename.Length - 3) + "xsd"; XmlSchema xsd = new XmlSchema(); xsd.sourceUri = xsd_file; XmlSchemaSet ss = new XmlSchemaSet(); ss.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); ss.Add(null,xsd_file); if (ss.Count > 0) { XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.Schemas.Add(ss); settings.Schemas.Compile(); settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack); XmlTextReader r = new XmlTextReader(filename2); using (XmlReader reader = XmlReader.Create(r,settings)) { while (reader.Read()) { } } }
ss.add已更改为具有命名空间和文件字符串.添加了settings.schemas.compile(),并添加了“using(xmlreader reader … …”)的无关紧要的重组.
这页帮助了我很多:http://msdn.microsoft.com/en-us/library/fe6y1sfe(v=vs.80).aspx它现在有效.
java – 使用Spring WS发布静态WSDL和相关的XSD架构
我有一个模块,我有我的XSD架构,其中一个架构可以使用架构位置中的相对路径引用另一个架构:
在这里,我还使用xjc从这些xsd模式生成Jaxb bean.
现在我有一个模块,我的web服务是使用spring-ws(2.0.4)实现的.我想使用静态WSDL并使用xsd模式发布它,其中模式位置将转换为URL,如“http://myerver.url.com/my.xsd”.
问题是如何优雅地实现这一目标?
(或者将XSD合并到一个模式中,然后合并到WSDL中)
(理论上我可以使用脚本转换这些XSD并将它们添加到资源(xsd和wsdl)到(spring dispatcher)servlet,但在我看来它并不舒服)
最佳答案
Spring Web服务实际上可以优雅地实现它.
您需要做的就是在bean定义xml文件中定义一个具有正确id(将用作没有.xsd的xsd名称)的SimpleXsdSchema bean,如下所示
更多信息(包括示例)可在以下链接中找到:
Static WSDL with imported XML Schema in Spring Web Service
今天关于针对XSD架构的Java XML验证和java xsd xml的分享就到这里,希望大家有所收获,若想了解更多关于6、xsd验证xml文件的java代码、c# – 使用嵌套XSD架构的XML验证错误 – 未声明类型、c# – 如何使用xmlschemaset和xmlreader.create对xsd模式验证xml、java – 使用Spring WS发布静态WSDL和相关的XSD架构等相关知识,可以在本站进行查询。
本文标签: