ノードを前の兄弟の子に移動しようとしていますが、すべてが同じレベルにあるという事実により、ノードは少し注意が必要です。
私の入力のイラスト:
<dl>
<dlentry>
<dt> Title 1 </dt>
<dd> Title 1's definition </dd>
<dt> Title 2 </dt>
<dd> Title 2's definition </dd>
<dt> Title 3 </dt>
<dd> Title 3's definition </dd>
</dlentry>
</dl>
<p> part of title 3's definition </p>
<p> another part of title 3's definition </p>
私がやろうとしているのは、これら2つの要素を下部に配置し、それらのテキストを「タイトル3」の定義の一部であるため、最後の要素のテキスト<p>
の最後に連結することです。<dd>
<dlentry>
必要な出力:
<dl>
<dlentry>
<dt> Title 1 </dt>
<dd> Title 1's definition </dd>
<dt> Title 2 </dt>
<dd> Title 2's definition </dd>
<dt> Title 3 </dt>
<dd> Title 3's definition part of title 3's definition another part of title 3's definition </dd>
</dlentry>
</dl>
私が扱っているもう1つの問題は、ソースドキュメントのXHTMLがいかに悪いかということです。これらの<p>
要素のテキストに対して正規表現を一致させて、ドキュメント内の他の場所にヒットしないようにする必要があります。
最初<p>
のテキストを希望どおりに正常に挿入できましたが、正規表現の一致を実行して2番目のテキストを取得できるように、テキストを機能させるのに問題があります。
要素のテキストも目的の場所に配置します。
これは、XSLT2.0を使用したスタイルシートのコードフラグメントです。
<xsl:analyze-string select="."
regex="my regex expression here">
<xsl:template match="dlentry">
<xsl:matching-substring>
<dlentry>
** <xsl:copy-of select="node()[ position() lt last()]"/>
<dd>
<xsl:copy-of select="node()[last()]/text()" />
<xsl:copy-of select=" parent::node()/following-sibling::node()[1]/text()"/>
</dd>
</dlentry>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select=".">
</xsl:non-matching-substring>
</xsl:template>
<xsl:template match="p[preceding-sibling::node()[1][self::node()[name(.)='dl']]]" />
<xsl:template match="p[preceding-sibling::node()[2][self::node()[name(.)='dl']]]" />
**アスタリスクが付いたコード行で、Saxonは「Axisstep child :: node()はここでは使用できません:コンテキストアイテムはアトミック値です」というエラーをスローします。私はanalyze-stringに精通していませんが、analyze-stringの外部でテンプレート内でcopy-of selectを実行すると、正常に実行されます。
この質問はちょっと長かったので申し訳ありませんが、私はこれまでに持っていたすべてを共有したいと思いました。
前もって感謝します。