xslt代码从xsd中删除未使用的导入模式

时间:2018-02-21 16:30:40

标签: java xslt

我有一个巨大的xml架构,其中包含许多未使用的xsd及其架构位置。这些都不会在整个文件中的任何位置被引用。有没有办法删除这些未使用的导入的xsds并使用xslt进行清理。

1 个答案:

答案 0 :(得分:1)

通过标识转换运行它们,使用与您要删除的xs:import元素匹配的专用空模板。确切的标准取决于您如何识别未使用的(文件名,在目录中等)。

以下是如何排除特定架构导入的示例,通过@schemaLocation中的文件名识别:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!--example of how to remove an import like: 
         <xs:import schemaLocation="some/path/to/unwanted-schema.xsd"/> 
     -->
    <xsl:template match="xs:import[ends-with(@schemaLocation, 'unwanted-schema.xsd')]"/>

</xsl:stylesheet>

您可以展开匹配条件,或创建多个与不需要的xs:import元素匹配的空模板。所有其他内容将被复制并保存。