我正在解析一些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表达式有所了解,非常感谢任何人提供的任何帮助!
谢谢,
拉斯
答案 0 :(得分:2)
Jirka是对的......属性没有得到解决。
但为了更加可维护,我会按照以下方式对其进行编码:
<xsl:when test="(@cols = count(colspec)) and (colspec[@colwidth][$number])">
<colspec colnum="{$number}" colname="{$number}"
colwidth="{colspec[@colwidth][$number]/@colwidth}"/>
</colspec>
./
的使用是冗余和混乱的,属性的简单值表达式可以使用属性值模板进行编码。
答案 1 :(得分:1)
我认为你应该使用这个<xsl:value-of select="./colspec[@colwidth][$number]/@colwidth"/>
。我不确定,但我认为属性值不是字符串值的一部分(由value-of输出)。