1

我正在解析一些 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* 的 colwidth,而是得到

coldwidth=""

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

我总是对 xpath 表达式感到困惑,非常感谢任何人提供的任何帮助!

谢谢,

拉斯

4

2 回答 2

2

Jirka 是对的……该属性没有得到解决。

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

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

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

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

于 2013-08-22T20:22:07.380 回答
1

我认为你应该使用这个<xsl:value-of select="./colspec[@colwidth][$number]/@colwidth"/>。我不确定,但我认为属性值不是字符串值的一部分(由 value-of 输出)。

于 2013-08-22T20:21:57.470 回答