0

ここでXSLT2.0で変換をコーディングしようとしています。

私のソースドキュメントはどのように見えますか(不正な形式ですが、それが私が扱っているものです):

<p>
       <a>
           WANT TO GRAB TEXT NODE HERE
           <br/>
           <br/>
           <i> WORD </i> 
           DEFINITION TEXT NODE HERE
           <br/>
           <br/>
           <i> WORD </i> 
           DEFINITION TEXT NODE HERE
       </a>
</p>

私の目標は、これを定義リストの現在のDTD標準に組み込んで、出力が次のように見えるようにすることです。

<p> WANT TO GRAB TEXT NODE HERE </p>
<dl>
    <dlentry>
         <dt><i> WORD </i></dt>
         <dd> ANOTHER TEXT NODE HERE <dd>
         <dt><i> WORD </i></dt>
         <dd> ANOTHER TEXT NODE HERE <dd>
    <dlentry>
<dl>

これが私の現在の変換からのコードスニペットです:

**<xsl:template match="a[descendant::i and descendant::br]/node()[1]">
   <p>
     <xsl:value-of select="." />
   </p> 
</xsl:template>**

<xsl:template match="p[string-length(.) gt 600]">
    <dl>
        <dlentry>
            <xsl:apply-templates />
        </dlentry>
    </dl>
</xsl:template>

<xsl:template match="i">
    <dt>
        <i>
            <xsl:value-of select="."/>
        </i>
    </dt>
</xsl:template>

<xsl:template match="text()[preceding-sibling::*[1][self::i]]">
    <dd>
        <xsl:value-of select="normalize-space()"/>
    </dd>
</xsl:template>

トランスフォームへの出力は次のようになります。

<dl>
    <dlentry>
         <p> WANT TO GRAB TEXT NODE HERE </p>
         <dt><i> WORD </i></dt>
         <dd> ANOTHER TEXT NODE HERE </dd>
         <dt><i> WORD </i></dt>
         <dd> ANOTHER TEXT NODE HERE </dd>
    </dlentry>
</dl>

私はそれが同じレベルの上に<p>あることを望みます。<dl>何か案は?

前もって感謝します。

4

1 に答える 1

1

これ:

  <xsl:template match="p[string-length(.) &gt; 600]">
    <p>
      <xsl:value-of select="a/text()[1]"/>
    </p>
    <dl>
      <dlentry>
        <xsl:apply-templates select="a/node()[position()>1]"/>
      </dlentry>
    </dl>
  </xsl:template>

  <xsl:template match="i">
    <dt>
      <i>
        <xsl:value-of select="."/>
      </i>
    </dt>
  </xsl:template>

  <xsl:template match="text()[preceding-sibling::*[1][self::i]]">
    <dd>
      <xsl:value-of select="normalize-space()"/>
    </dd>
  </xsl:template>

<a>動作するはずです-タグ内の最初のテキストノードを個別に処理してから、他のノードにテンプレートを適用します( position()>1

于 2012-09-18T16:18:05.053 に答える