XSLT - 将节点添加到空白

时间:2015-08-04 11:23:44

标签: xml xslt xslt-2.0

我有以下xml

<session id="1" type="spaceTest">
    <p>sentencewithnospace</p>
    <p>sentence          withtenspace</p>
    <p>sentence withonetab</p>
    <p>sentence                                     withtentabs</p>
</session>

我的要求是将<s>节点添加到space并将节点添加到选项卡。并且id存在连续的空格或制表符,连续空格或制表符的数量应显示为<s><t>节点的属性。所以输出应该是,

<session id="1" type="spaceTest">
        <p>sentencewithnospace</p>
        <p>sentence<s c="10"/>          withtenspace</p>
        <p>sentence<t c="1"/>   withonetab</p>
        <p>sentence<t c="10"/>                                      withtentabs</p>
    </session>

我已经在xsl之后编写了这个任务,

<xsl:template match="p/text()" priority="10">
    <xsl:analyze-string select="." regex="&#x0020;+|&#x9;+">
      <xsl:matching-substring>
        <xsl:if test="'&#x0020;'">
          <s c="{string-length()}"/>
        </xsl:if>
        <xsl:if test="'&#x9;'">
          <t c="{string-length()}"/>
        </xsl:if>
        <xsl:value-of select="."/>
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:value-of select="."/>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
</template>

但是这给了我以下输出,

<session id="1" type="spaceTest">
    <p>sentencewithnospace</p>
    <p>sentence<s c="10"/><t c="10"/>          withtenspace</p>
    <p>sentence<s c="1"/><t c="1"/> withonetab</p>
    <p>sentence<s c="10"/><t c="10"/>                                       withtentabs</p>
</session>

如上图所示,它为空间和制表符提供了节点和节点。我是xslt的新手,我想知道我的代码结构是否存在。你能建议我怎么做这个任务吗?

1 个答案:

答案 0 :(得分:1)

check <xsl:if test="'&#x0020;'">总是返回true,因为它只是将非空字符串'&#x0020;'转换为布尔值true。试试<xsl:if test="contains(., '&#x0020;')">