是否有任何gradle插件来验证XML?

时间:2018-11-09 18:02:42

标签: xml validation gradle automation gradle-plugin

我在一个项目中工作,该项目具有用于代码生成的xml文件,并使用gradle进行构建。

我是gradle的新手,但是我听说有很多plugins可以帮助执行常规任务,而且我想知道是否有一些用于xml简单验证的插件(缺少引号和括号)。

我想获得文件名和缺失列表。

PS尝试在Google中进行搜索,但找不到类似的内容。

UPD如果在不久的将来需要对xml文件(标签,参数)进行完全验证,我该怎么办?

1 个答案:

答案 0 :(得分:1)

编写自己的书很简单

class XmlValidate extends DefaultTask {
    @InputFiles
    private FileCollection xmlFiles

    @InputFile
    File xsd

    void xml(Object files) {
       FileCollection fc = project.files(files)
       this.xmlFiles = this.xmlFiles == null ?  fc : this.xmlFiles.add(fc)
    }

    @TaskAction
    public void validateXml() {
        DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder()
        Validator validator = null
        if (xsd != null) {
            SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
            Schema schema = factory.newSchema(new StreamSource(xsd))
            validator = schema.newValidator()
        } 
        Set<File> failures = [] as Set
        xmlFiles.forEach {
            Document document = null
            try {
                document = parser.parse(it)
            } catch (Exception e) {
                logger.error("Error parsing $it", e) 
                failures << it
            } 
            if (document && validator) {
                try {
                    validator.validate(new DOMSource(document))
                } catch (Exception e) {
                    logger.error("Error validating $it", e) 
                    failures << it
                } 
            } 
        }
        if (failures) throw new BuildException("xml validation failures $failures") 
    } 
}

在build.gradle中使用

task validateXml(type: XmlValidate) {
    xml ['foo.xml', 'bar.xml']
    xml fileTree(dir: 'src/main/resources/baz', include: '*.xml')
    xsd = file('path/to.xsd')
}