【问题标题】:XSLT Escaping CharactersXSLT 转义字符
【发布时间】:2010-09-22 15:34:57
【问题描述】:

我在 XSLT 中有以下片段。有没有办法在不使用 ASCII 等价物转义字符 <> 的情况下重写它?

<coord>
...
<xsl:with-param name="substringIn" select="'' ''"/>
<xsl:with-param 
  name="substringOut" 
  select="'&#60;/coord&#62;&#60;coord&#62;'" 
/> 
...
</coord>

我有一串空格分隔的数字,例如

<value>1 2 3 4 5 6 7</value> 

我想将它们中的每一个都转换为 XML 标记,例如:

<coord>1</coord>
<coord>2</coord>
<coord>3</coord>
<coord>4</coord>
<coord>5</coord>
<coord>6</coord>
<coord>7</coord>

我上面的代码就是这样做的,但我不想使用 ASCII 转义字符。

【问题讨论】:

  • 好问题 (+1)。请参阅我的答案以获得真正简单的 XSLT 解决方案。

标签: xml xslt


【解决方案1】:

XSLT 拆分字符串并将其包含在元素中的方式是这样的

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="text()" name="split">
  <xsl:param name="pText" select="."/>

  <xsl:choose>
   <xsl:when test="not(contains($pText, ' '))">
    <coord><xsl:value-of select="$pText"/></coord>
   </xsl:when>
   <xsl:otherwise>
    <coord>
     <xsl:value-of select="substring-before($pText, ' ')"/>
    </coord>

    <xsl:call-template name="split">
     <xsl:with-param name="pText" select="substring-after($pText, ' ')"/>
    </xsl:call-template>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
 </xsl:stylesheet>

当此转换应用于此 XML 文档时

<t>1 2 3 4 5 6 7</t>

产生想要的正确结果

<coord>1</coord>
<coord>2</coord>
<coord>3</coord>
<coord>4</coord>
<coord>5</coord>
<coord>6</coord>
<coord>7</coord>

【讨论】:

  • +1 很好的解决方案。但我认为规范化默认参数值添加一个空格将使只有一个xls:if 的紧凑代码成为可能。
  • @Alejandro:是的,但在现实世界中,只有一个空格是唯一的分隔符——我的解决方案适用于所有情况,而normalize-space() 解决方案仅适用于空格的情况-分隔符。
【解决方案2】:

您可以使用 CDATA 部分:

<xsl:with-param name="substringOut"><![CDATA[</coord><coord>]]></xsl:with-param>

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2013-02-21
    • 2021-01-20
    • 2014-04-10
    • 1970-01-01
    相关资源
    最近更新 更多