如何在linux中下载所有导入的XSD架构

时间:2015-06-25 06:04:41

标签: xml xsd

有没有办法从linux控制台自动下载所有导入的XSD文件,知道主XSD的URL?

2 个答案:

答案 0 :(得分:2)

名为cxsd的Node.js包可以执行此操作。您可以安装它并下载这样的模式文件(在新目录中运行命令):

echo '{ "scripts": { "cxsd": "cxsd" } }' > package.json
npm install cxsd
npm run cxsd http://schemas.opengis.net/wfs/1.1.0/wfs.xsd

如果省略单引号('),它也适用于Windows。

来自不同主机的所有必需.xsd个文件将显示在新目录cache/xsd/<hostname>/<path...>/<name>.xsd下。

作为奖励,它会将定义的名称空间编译为cxml解析器的TypeScript .d.ts文件和表,并将它们保存在新目录xmlns中。

答案 1 :(得分:1)

这是一个如何在Groovy / Gradle中执行此操作的简单示例。它会将所有文件下载到 xsd 目录。我使用蓝牙XSD作为示例,您必须相应地调整代码。

def downloadXsd(url, dest) {
    println "Downloading ${url}"

    // strip off the protocol
    def uri = new URI(url)
    def path = "${uri.host}/${uri.path}"
    def destfile = new File("${dest}/${path}".replace("//", "/"))

    destfile.getParentFile().mkdirs()

    def file = destfile.newOutputStream()
    file << new URL(url).openStream()
    file.close()

    def xsd = new XmlSlurper()
        .parse(destfile)
        .declareNamespace('xs':'http://www.w3.org/2001/XMLSchema')

    assert xsd instanceof groovy.util.slurpersupport.GPathResult

    xsd.'xs:include'.each {
       downloadXsd("http://schemas.bluetooth.org/Documents/${it.@schemaLocation}", dest)
    }
}

这是一个调用它的gradle任务

task downloadXSD << {
    downloadXsd('http://schemas.bluetooth.org/Documents/characteristic.xsd', 'xsd')
}