从XSLt - Version 1中的字符串中删除值

时间:2015-12-02 13:04:21

标签: javascript xml xslt xslt-1.0

我有一个XML文档,其中包含以下语法作为示例:

<EX1>
    <BUILDING>
        <ROOM> Room Name 1</ROOM>
    </BUILDING>
</EX1>

我想要做的是选择字符串ROOM但只返回&#34;名称1&#34;并删除&#34; room&#34;来自字符串。

如何在XSL 1中完成?

由于

2 个答案:

答案 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" />