XML格式验证

时间:2009-08-11 09:19:59

标签: java xml

感觉就像我要重新发明轮子一样。我有XML格式的消息有效负载(例如从客户端通过套接字)(在简单的java.lang.String中)。

以下是有效负载的示例:

<update>
    <type>newsource</type>
    <sources>
        <source>vedbyroad box 1492</source>
    </sources>

</update>

我想验证xml文档的结构是否真的像这样。感觉像正确的xml工具已经可用吗?

6 个答案:

答案 0 :(得分:7)

听起来您需要XML Schema来处理此文档。这是一个Java-based教程。

答案 1 :(得分:3)

您需要使用架构验证XML。

这是JAXB的一个例子:

JAXBContext jc = JAXBContext.newInstance("com.acme.foo:com.acme.bar" );
Umarshaller u = jc.createUnmarshaller();  
u.setValidating(true);
SchemaFactory sf = SchemaFactory.newInstance(
      javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("mySchema.xsd"));
u.setSchema(schema);
MyObject myObj = (MyObject)u.unmarshal( new File( "myFile.xml" ) ); 

答案 2 :(得分:3)

如果需要验证,则可以使用javax.xml.validation包:

SchemaFactory schemaFactory = SchemaFactory
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(new File("SchemaValidation.xsd"));

Validator validator = schema.newValidator();
validator.validate(new StreamSource(new StringReader(xml)));

如果您要将文档解析为其他形式,则可以在该过程中进行验证(例如,使用DocumentBuilder.setSchema)。

答案 3 :(得分:2)

我认为您正在寻找的是XML DTD(文档类型定义)。这是一个link to get you started

答案 4 :(得分:1)

使用XSD进行模式检查。 DTD已经过时了。

如果您想以简单的方式了解有关XSD的更多信息,可以下载 Liquid Xml Studio,它有一个免费的社区版 http://www.liquid-technologies.com/XmlStudio/XmlStudio.aspx

这家公司最棒的是它为XSD提供了一个非常用户友好的教程。 http://www.liquid-technologies.com/Tutorials/XmlSchemas/XsdTutorial_01.aspx

答案 5 :(得分:1)

虽然有很多人提到XML Schema,但您可能希望看一下Relax NG稍微简单的事情。