2013-10-25 41 views
1

您好,我在我的xslt中使用一个外部命名模板来标记一个字符串并将其存储在一个变量中。 我使用的是Altova XML SPY,我仅限于xslt 1.0。问题是每次我必须从内置XSLT引擎更改选项到Microsoft。 是否有任何节点集函数或一些其他函数而不是节点集的内置XSLT引擎XSLT 1.0在xslt-engine中构建的altova xmlspy是否没有节点集功能?

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
<xsl:import href="tokenize.xsl"/> 
<xsl:template match="/string/upara"> 

     <xsl:variable name="string"> 
      <xsl:call-template name="tokenizeString"> 
       <xsl:with-param name="list" select="/string/upara"/> 
       <xsl:with-param name="delimiter" select="' '"/> 

      </xsl:call-template> 
     </xsl:variable> 



<xsl:for-each select="msxsl:node-set($string)/word"> 
    <xsl:value-of select="string-length(.)" /> 
</xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

XML我现在用的就是

<string> 
<upara>This is a small string </upara> 
</string> 

字符串变量具有的所有单词节点这样

<string> 
<word>This</word> 
<word>is</word> 

现在我要每个字迭代,找到它的长度

请告诉我是否有更好的方法来做到这一点。

我得到这个工作

对不起,我是新来的XSLT 1.0和弄糊涂了。 而不是使用节点集我只是用

<xsl:for-each select="$string/word"> 
xsl:value-of select="string-length(.)" /> 
<br></br> 
</xsl:for-each> 

它可以在不改变发动机:)完美:d

回答

0

XML间谍具有治疗结果树片段(RTF),好像他们是节点集的习惯。我找不到任何直接说明这一点的文档,但这是你会发现的。

任何返回一个(RTF)并存储在一个变量中的xsl命令,可以像查询它是一个节点集一样查询,例如使用xsl:value-of

This question,有几个XSLT引擎非特定的appraches,可能值得一看。