0

尝试在 XSLT 2.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 回答