我用java解析XML文档。每个文档都有根标记(它是一个字符串)和许多带有文本(未知数字)的标记(在代码框中检查代码)。 <AnyStrYouwant>
标记的正文中包含一串字符。
<anyRoot>
<AnyStrYouwant1>anyTextYouWant1</AnyStrYouwant1>
<AnyStrYouwant2>anyTextYouWant2</AnyStrYouwant2>
...
</anyRoot>
如果某个文件适合这种结构,程序化(在java中)如何chek。我可以解析XML,我知道有DTD(例如)可以检查具有已知格式(标签名称和内容)的XML文件。在这种情况下我应该使用什么?
PS:有些人建议我使用XSD。但是,如果我想验证元素,我需要知道根元素名称。我不知道根元素名称(每个文件都有自己的根元素)。答案 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;
}