XSLT:获取开始标记的长度

时间:2014-12-07 09:12:04

标签: xslt xpath tags string-length

如何在运行时获取xslt标记的长度?

我的代码:

<Footer xtt:startTag="COUNT" xtt:align="left" xtt:separator="|">
            <Count xtt:align="right" xtt:fixedLength="5"><xsl:value-of select="ws:Worker_Sync/ws:Header/ws:Worker_Count"/></Count>
</Footer>

我想做的是:

<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>

所以我想要包含开始标记的长度&#34; COUNT&#34;代替X.我不想对值进行硬编码5.如何使用开始标记代替&#34; X&#34;?

2 个答案:

答案 0 :(得分:0)

通常,您可以使用XPath函数name()local-name()来确定节点的名称,然后使用string-length()来获取长度。

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

我知道解决此限制的两种可能性:

  • 如果您使用XSLT 2.0或更高版本,或者您使用在XSLT 1.0之上实现此功能的XSLT处理器,您可以将结果树的相关部分存储在变量中,然后将结果树片段作为输入处理文档(XSLT 1.0本身并不支持/允许这样做。)
  • 您可以存储名称&#34; Count&#34;在变量中。然后,您可以使用<xsl:element/>在结果树中创建元素,引用元素名称的变量以及确定字符串长度。

答案 1 :(得分: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>