我正在解析一些DocBook xml以转换为我们的内部格式。

在处理如下的tgroup元素时:

      <tgroup cols="4">
        <colspec colwidth="1*" />
        <colspec colwidth="1*" />
        <colspec colwidth="1*" />
        <colspec colwidth="1*" />


如果给定的tgroup的col属性值与子colspec子元素的数量完全匹配,并且该colspec有一个colwidth属性,我想在结果树的colspec元素中使用colwidth值。

我的检查和代码如下:

<xsl:when test="(@cols = count(./colspec)) and (./colspec[@colwidth][$number])">

   <colspec>
      <xsl:attribute name="colnum">
           <xsl:value-of select="$number"/>
  </xsl:attribute>
  <xsl:attribute name="colname">
       <xsl:value-of select="$number"/>
  </xsl:attribute>


  <xsl:attribute name="colwidth">
       <xsl:value-of select="./colspec[@colwidth][$number]"/>
  </xsl:attribute>
</colspec>




($ number是当前正在处理的colspec的编号。)我没有得到1 *的宽度,而是得到

coldwidth=""


我需要指定我想要属性值吗?

我总是对xpath表达式有所了解,任何人都可以提供的任何帮助将不胜感激!

谢谢,

拉斯

最佳答案

Jirka是正确的...该属性未得到解决。

但是为了更易于维护,我将按照以下方式进行编码:

<xsl:when test="(@cols = count(colspec)) and (colspec[@colwidth][$number])">

  <colspec colnum="{$number}" colname="{$number}"
           colwidth="{colspec[@colwidth][$number]/@colwidth}"/>
  </colspec>


./的使用是多余和混乱的,并且可以使用属性值模板对属性的简单值表达式进行编码。

09-26 15:45