【问题标题】:XML format verificationXML 格式验证
【发布时间】:2009-08-11 09:19:58
【问题描述】:

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

以下是有效负载的示例:

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

</update>

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

【问题讨论】:

    标签: java xml


    【解决方案1】:

    听起来您需要XML Schema 来获取此文档。这是Java-based 教程。

    【讨论】:

      【解决方案2】:

      您需要使用架构验证您的 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" ) ); 
      

      【讨论】:

        【解决方案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)。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • DTD 已过时。绝对没有正当理由再使用它。
          • 如何定义没有 DTD 的实体?
          • 实体不是也过时了吗?
          • 您使用 XML Schema Definition (XSD),如下所示:w3schools.com/Schema/default.asp
          【解决方案5】:

          使用 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

          【讨论】:

            【解决方案6】:

            虽然有很多人提到 XML Schema,但您可能希望查看 Relax NG 以了解更简单的内容。

            【讨论】:

              猜你喜欢
              • 2013-05-22
              • 2011-06-02
              • 2010-11-22
              • 1970-01-01
              • 2011-07-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多