Xml 如何在linux中下载包含所有导入的XSD模式

Xml 如何在linux中下载包含所有导入的XSD模式,xml,xsd,Xml,Xsd,有没有一种方法可以在知道主XSD的URL的情况下,从linux控制台自动下载包含所有导入的XSD文件 一个名为Node.js的包可以做到这一点。您可以这样安装和下载模式文件(在新目录中运行命令): 如果省略单引号(”),它也适用于Windows 来自不同主机的所有必需的.xsd文件将显示在新目录下cache/xsd//.xsd 作为奖励,它将把定义的名称空间编译为分析器的TypeScript.d.ts文件和表,并将它们保存在一个新目录xmlns下面是一个如何在Groovy/Gradle中执行此操

有没有一种方法可以在知道主XSD的URL的情况下,从linux控制台自动下载包含所有导入的XSD文件

一个名为Node.js的包可以做到这一点。您可以这样安装和下载模式文件(在新目录中运行命令):

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

来自不同主机的所有必需的
.xsd
文件将显示在新目录下
cache/xsd//.xsd


作为奖励,它将把定义的名称空间编译为分析器的TypeScript
.d.ts
文件和表,并将它们保存在一个新目录
xmlns

下面是一个如何在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)
    }
}
def下载XSD(url,dest){
println“正在下载${url}”
//取消协议
def uri=新uri(url)
def path=“${uri.host}/${uri.path}”
def destfile=新文件(“${dest}/${path}”。替换(“//”,“/”)
destfile.getParentFile().mkdirs()
def file=destfile.newOutputStream()

文件如果我理解的很好,您不想做任何xml xsd验证,您只想在一个URL下载xsd和xsd导入的xsd,是吗?是的。事实上,我正在创建AWS Lambda函数来解析RIF-CS文档。我遇到过xml4js库,它假设会自动下载xsd,但它确实会RIF-CS的情况并非如此,它会抛出一个错误。我曾尝试手动下载每个XSD并使用xml4js函数附加它,但即使在这之后,它仍然无法解析文档并抛出一个错误。我已将代码、XSD和xml示例发布到我的实验性github中:目前,我已经没有选择并使用xml2js。对不起,我我不熟悉您谈论的大多数技术,我只熟悉w3c XML模式,通常称为XSD。您要下载其导入的XSD是w3c XML模式?不,它是注册表对象XML模式。但我以前在Java应用程序(使用JAXB)中使用过它没有问题,所以它必须格式良好。我猜xml4js模块在某些xsd标记上无法正常工作。尽管如此,它现在并不那么重要,我已经切换到xml2js,它根本不需要加载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)
    }
}
task downloadXSD << {
    downloadXsd('http://schemas.bluetooth.org/Documents/characteristic.xsd', 'xsd')
}