我需要做些什么:
<xsl:template match="xs:simpleType">
<xsl:copy>
<xsl:copy-of select="node()[not(self::xs:annotation or self::xs:restriction)]|@*"/>
</xsl:copy>
</xsl:template>
目前,事实证明:
<xs:simpleType xmlns:core="urn:org:pesc:core:CoreMain:v1.4.0" name="SINIDType">
</xs:simpleType>
我希望它看起来像:
<xs:simpleType name="SINIDType" />
答案 0 :(得分:3)
在那里有空行,看起来你的select语句是(正确地)选择你的空白节点以及你的元素。尝试使用
select="*[not(self::xs:annotation or self::xs:restriction)]|@*"
只会匹配元素节点,而不是文本节点。
答案 1 :(得分:0)
序列化程序负责将空元素作为<abc></abc>
或<abc/>
发出,并且它们完全等效。有些序列化程序没有选项,并且总是生成一个或另一个。
但可能是你在他们之间散发空白;在这种情况下,您必须将xsl:copy
更改为不包含无关紧要的空格的其他内容,例如将or text() = ''
添加到谓词中。
就消除xmlns:core
命名空间声明而言,这取决于您的上下文。如果在您的类型中存在需要它的元素,或者您正在使用XSLT并且未在@exclude-result-prefixes
根元素上使用<xsl:stylesheet>
属性排除名称空间,则将始终生成它。即便如此,根据您的处理器环境,序列化程序可能“决定”它需要不必要的命名空间输出,因为它在输入范围内。
另外,看到<xsl:copy> ... <xsl:copy-of .../> ... </xsl:copy>
有点奇怪。你真的不应该将copy-of
包裹在copy
内。只需将其copy-of
。