我有一个XML文档,其中包含以下语法作为示例:
<EX1>
<BUILDING>
<ROOM> Room Name 1</ROOM>
</BUILDING>
</EX1>
我想要做的是选择字符串ROOM但只返回&#34;名称1&#34;并删除&#34; room&#34;来自字符串。
如何在XSL 1中完成?
由于
答案 0 :(得分:0)
一个可能的XSL 1.0转换,假设目标子串"Room"
总是在开头或不存在:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- identity template : copy element, unchanged -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- custom template to copy ROOM element and remove substring 'Room' from the inner text -->
<xsl:template match="ROOM[contains(.,'Room')]">
<xsl:copy>
<xsl:value-of select="normalize-space(substring-after(., 'Room'))"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强> xsltranform demo
强>
答案 1 :(得分:0)
这可以通过使用以下模板来完成:
<xsl:template name="string-replace-all">
<xsl:param name="text" />
<xsl:param name="replace" />
<xsl:param name="by" />
<xsl:choose>
<xsl:when test="contains($text, $replace)">
<xsl:value-of select="substring-before($text,$replace)" />
<xsl:value-of select="$by" />
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text"
select="substring-after($text,$replace)" />
<xsl:with-param name="replace" select="$replace" />
<xsl:with-param name="by" select="$by" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
代替正常选择值,使用:
<xsl:variable name="myVar">
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text" select="ROOM" />
<xsl:with-param name="replace" select="'Room'" />
<xsl:with-param name="by" select="''" />
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$myVar" />