首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT:将<element></element>变成<element />

XSLT:将<element></element>变成<element />
EN

Stack Overflow用户
提问于 2009-07-09 04:18:00
回答 2查看 181关注 0票数 2

我需要对此做什么:

代码语言:javascript
复制
    <xsl:template match="xs:simpleType">
      <xsl:copy>
        <xsl:copy-of select="node()[not(self::xs:annotation or self::xs:restriction)]|@*"/>
      </xsl:copy>
    </xsl:template>

目前,事实证明:

代码语言:javascript
复制
<xs:simpleType xmlns:core="urn:org:pesc:core:CoreMain:v1.4.0" name="SINIDType">


</xs:simpleType>

我希望它看起来像这样:

代码语言:javascript
复制
<xs:simpleType name="SINIDType" />
EN

回答 2

Stack Overflow用户

发布于 2009-07-09 05:15:17

有了这些空行,看起来您的select语句(正确地)选择了空格节点和元素。尝试使用

代码语言:javascript
复制
select="*[not(self::xs:annotation or self::xs:restriction)]|@*"

它将只匹配元素节点,而不匹配文本节点。

票数 3
EN

Stack Overflow用户

发布于 2009-07-09 05:02:37

序列化程序负责将空元素作为<abc></abc>还是<abc/>发出,它们是完全等效的。一些序列化程序没有给出任何选项,并且总是会产生一个或另一个。

但也可能是您在它们之间添加了空格;在这种情况下,您必须将xsl:copy更改为不包含无关紧要的空格的其他内容,比如将or text() = ''添加到谓词中。

至于消除xmlns:core名称空间声明,这取决于您的上下文。如果在您的类型中有需要它的元素,或者如果您正在使用XSLT并且没有在<xsl:stylesheet>根元素上排除带有@exclude-result-prefixes属性的名称空间,那么总是会生成它。即使这样,根据您的处理器环境,序列化程序可能会“决定”不需要该名称空间输出,因为它在输入的作用域中。

而且,看到<xsl:copy> ... <xsl:copy-of .../> ... </xsl:copy>也有点奇怪。您真的不应该将copy-of包装在copys中,只需将其设置为copy-of即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1101817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档