有没有办法从linux控制台自动下载所有导入的XSD文件,知道主XSD的URL?
答案 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')
}