我有一个巨大的xml架构,其中包含许多未使用的xsd及其架构位置。这些都不会在整个文件中的任何位置被引用。有没有办法删除这些未使用的导入的xsds并使用xslt进行清理。
答案 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
元素匹配的空模板。所有其他内容将被复制并保存。