感觉就像我要重新发明轮子一样。我有XML格式的消息有效负载(例如从客户端通过套接字)(在简单的java.lang.String中)。
以下是有效负载的示例:
<update>
<type>newsource</type>
<sources>
<source>vedbyroad box 1492</source>
</sources>
</update>
我想验证xml文档的结构是否真的像这样。感觉像正确的xml工具已经可用吗?
答案 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稍微简单的事情。