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 に答える