2014-12-07 85 views
0

如何在运行时获取xslt标记的长度?XSLT:获取起始标记的长度

我的代码:

​​

我想要做的是这样的:

<Footer xtt:startTag="COUNT" xtt:align="left" xtt:separator="|"> 
      <Count xtt:align="right" xtt:fixedLength="10 - string-length(X)"><xsl:value-of select="ws:Worker_Sync/ws:Header/ws:Worker_Count"/></Count> 
</Footer> 

所以我想包括在地方X.我不要的开始标记“COUNT”的长度不想硬编码值5.我如何引用开始标记来代替“X”?

+1

呃?计数开始标记的长度不是5,它是45(包括“<" to the ">”在内的所有内容)。你的意思是元素名称的长度? – 2014-12-07 21:47:02

回答

0

一般来说,您可以使用XPath函数name()local-name()来确定一个节点的名称,然后string-length()来获得长度。

但是,参照结果树的当前上下文节点不是标准的XSLT功能,因此如果您创建像这样的元素,则无法引用结果树的<Count/>元素。

我知道有两种可能性来解决此限制:如果使用XSLT 2.0或更新版本

  • ,或者如果您使用的XSLT 1.0的顶部实现此功能的XSLT处理器,可以存储相关部分结果树放在一个变量中,然后将结果树片段作为输入文档处理(XSLT 1.0本身不支持/允许)。
  • 您可以将名称“计数”存储在变量中。然后,您可以使用<xsl:element/>在结果树中创建元素,引用元素名称的变量以及确定字符串长度。
0

做在一个步:

<Footer xtt:startTag="COUNT" xtt:align="left" xtt:separator="|"> 
      <Count xtt:align="right" xtt:fixedLength="{10 - string-length(ws:Worker_Sync/ws:Header/ws:Worker_Count)}"><xsl:value-of select="ws:Worker_Sync/ws:Header/ws:Worker_Count"/></Count> 
</Footer> 

或者缩短代码,并确保你只有在发生变化的情况下,编辑一个表达式中使用一个变量:

<xsl:variable name="count" select="ws:Worker_Sync/ws:Header/ws:Worker_Count"/> 

<Footer xtt:startTag="COUNT" xtt:align="left" xtt:separator="|"> 
      <Count xtt:align="right" xtt:fixedLength="{10 - string-length($count)}"><xsl:value-of select="$count"/></Count> 
</Footer>