我在一个项目中工作,该项目具有用于代码生成的xml文件,并使用gradle
进行构建。
我是gradle
的新手,但是我听说有很多plugins
可以帮助执行常规任务,而且我想知道是否有一些用于xml简单验证的插件(缺少引号和括号)。
我想获得文件名和缺失列表。
PS尝试在Google中进行搜索,但找不到类似的内容。
UPD如果在不久的将来需要对xml文件(标签,参数)进行完全验证,我该怎么办?
答案 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')
}