检查XML文档结构

时间:2014-07-23 08:31:48

标签: java xml

我用java解析XML文档。每个文档都有根标记(它是一个字符串)和许多带有文本(未知数字)的标记(在代码框中检查代码)。 <AnyStrYouwant>标记的正文中包含一串字符。

<anyRoot>
    <AnyStrYouwant1>anyTextYouWant1</AnyStrYouwant1>
    <AnyStrYouwant2>anyTextYouWant2</AnyStrYouwant2>
    ...
</anyRoot>

如果某个文件适合这种结构,程序化(在java中)如何chek。我可以解析XML,我知道有DTD(例如)可以检查具有已知格式(标签名称和内容)的XML文件。在这种情况下我应该使用什么?

PS:有些人建议我使用XSD。但是,如果我想验证元素,我需要知道根元素名称。我不知道根元素名称(每个文件都有自己的根元素)。

3 个答案:

答案 0 :(得分:1)

我无法使用我的新帐户发表评论,但是您可以使用DTD,Schematron Schematron更加灵活,它是行业标准,DTD实际上是一种传统技术,但仍被广泛使用。 DTD将检查允许的标签(简而言之),Schematron能够检查文件的结构,例如某些特殊标签应该在前10行XML等中。

如果您只检查现有标签和属性允许值,我会使用DTD。 如果你做了一些更复杂的事情,我会建议使用Schematron及其基于规则的验证。

答案 1 :(得分:0)

您可以使用DTD或XSD验证XML,请查看:

http://www.w3schools.com/xml/xml_dtd.asp

http://www.journaldev.com/895/how-to-validate-xml-against-xsd-in-java

XSD是验证XML的高级技术,它比DTD更灵活,但您可以使用其中一种技术来解决您的问题。

答案 2 :(得分:0)

您可以使用此示例代码检查XML和XSD。

import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.SchemaFactory;
import org.xml.sax.InputSource;

public boolean isValidXML(InputStream is) {
    InputSource isrc;
    try {
        isrc = new InputSource(new FileInputStream("path/your-xsd-file.xsd")));
        SAXSource sourceXSD = new SAXSource(isrc);
        SchemaFactory
                .newInstance("http://www.w3.org/2001/XMLSchema")
                .newSchema(sourceXSD).newValidator()
                .validate(new StreamSource(is));
    } catch (Exception e) {
        return false;
    }
    return true;
}