0

サンプルコードは次のとおりです。

XML

<docbody>
    <p>This is the main paragraph</p>
        <ul>This is a list element!</ul>
        --{add thousands of lines of code}--
    <a name='#r1'>Hello</a>
    <p>Footnotes begin</p>
        <ul>This text should be rendered right below footnote</ul>
</docbody>

これは問題ないようです。ただし、この XML ファイルを変換する私が持っている XSLT コードは、クラス "paragraphtext" を追加します。これにより、<ul>必要に応じて脚注のすぐ下ではなく、要素内のすべてのテキストが段落に強制されます。

要約すると<ul>、サンプルの 2 番目の要素が脚注の下に留まり、指定されたクラスに従って段落に強制されないようにする必要があります (CSS やクラスを変更することはできません)。

私がこれを行うことができると思った方法は、2番目の<ul>要素の位置を何らかの方法で検出することです-これらの要素は両方とも同じ親を持っていますが、役立つかもしれないことの1つは、<a name="#r1">要素が常に脚注セクションの前にあるという事実です-それ文書の本文セクションで見つけることはできません。

そこで、その要素がその名前の要素の<ul>に来るかどうかをテストする方法があればと思ったのですが、関数は引数を取りませんか?astarts-with[@name, '#r1']position()

それで、何らかの方法で要素の位置を「検出」し、aそれを要素の位置と比較する方法はありulますか? ありがとう。

編集

私が持っている XSLT は 10,000 行のコードですが、関連するセクションは次のとおりです。

  <xsl:template match="ul">
    <div>
      <xsl:attribute name="class">
        <xsl:value-of select="'paragraphtext'" />
      </xsl:attribute>
      <xsl:apply-templates />
    </div>
  </xsl:template>

私が現在取得しているテキスト:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae dolor cursus、aliquet purus eget、placerat augue。Morbi blandit, risus ac dignissim dapibus, lectus ipsum venenatis augue, a malesuada magna purus et quam. Curabitur tincidunt eleifend orci, et tempor nunc laoreet at. Nullam vitae mauris nisi. 関連する脚注の後ではなく、ここに脚注の本文が入ります。

脚注

(1)参考1

(2)参考2

取得したいテキスト:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec vitae dolor cursus、aliquet purus eget、placerat augue。Morbi blandit, risus ac dignissim dapibus, lectus ipsum venenatis augue, a malesuada magna purus et quam. Curabitur tincidunt eleifend orci, et tempor nunc laoreet at. Nullam vitae mauris nisi.

脚注

(1)参考1

**Footnote body goes here  - this is the correct way**

(2)参考2

4

2 に答える 2

1

preceding-sibling軸を使用できます。

2 番目の ul を直接選択するには:

<xsl:value-of select="/docbody/ul[preceding-sibling::ul]"/>

条件付きの for ループで使用するには:

<xsl:for-each select="/docbody/ul">
    <xsl:if test="normalize-space(preceding-sibling::ul)">
        <xsl:value-of select="."/>
    </xsl:if>
</xsl:for-each>
于 2013-10-16T16:43:54.080 に答える