入力カット
<items>
<item>Lorem ipsum dolor sit amet, sed diam nonumy tempor magna aliquyam erat. Ssed diam voluptua.</item>
<item>Lorem ipsum dolor sit amet, sed diam nonumy<br/>tempor magna aliquyam erat. Ssed diam voluptua.</item>
<item>Lorem ipsum dolor sit amet, sed diam nonumy <b>tempor magna aliquyam erat</b>. Ssed diam voluptua.</item>
<item>Lorem ipsum dolor sit amet, sed diam nonumy <b>tempor <i>magna</i> aliquyam erat</b>. Ssed diam voluptua.</item>
<item>Lorem ipsum dolor sit amet.</item>
</items>
要件
- 例えば、特定の長さの後後に最も近い単語を "カット" 25文字(税込。空白)
- 位置は属性
foo="bar"
template with mode='xy'
(これによって処理されている位置後のすべてのtext()
を取得後- すべて
*
手つかずある位置前にすべてのnodes()
は、テンプレートはテキストを醜くします)。text()
-nodesは、[4]の項目を参照particial可読で/、*
をuglifiedこれらtext()
-nodes新しい要素<o foo="bar">
内に包まれている場合、テンプレートは、「#」 - として
<o foo="bar">
+自体内のすべての隣接text()
-nodesをラップ=> "aliquyamのERAT"]string-length(text()) le $visibleChars
あれば、何も
出力
<!-- middle of word "temppor" -->
<xsl:variable name="visibleChars" select="number(48)"/>
<items>
<item>Lorem ipsum dolor sit amet, sed diam nonumy tempor<o foo="bar"> #</o></item>
<item>Lorem ipsum dolor sit amet, sed diam nonumy<br/>tempor<o foo="bar"> #</o></item>
<item>Lorem ipsum dolor sit amet, sed diam nonumy <b>tempor<o foo="bar">#</o></b><o foo="bar">#</o></item>
<item>Lorem ipsum dolor sit amet, sed diam nonumy <b>tempor <i foo="bar">#</i><o foo="bar"> #</o></b><o foo="bar">#</o></item>
<item>Lorem ipsum dolor sit amet.</item>
</items>
を起こりません '#' 失敗した擬似XSLT
<xsl:templates match="item">
WHEN count(text()) eq count(node())
THEN
Create a $temp of <item> AND insert a <cut/> at position ($visibleChars + CharsTillNextDelimiter)
<!-- chars to stay visible -->
<xsl:apply-templates select="$temp/text()[following-sibling::cut]"/>
<!-- chars to uglify -->
<xsl:apply-templates select="$temp/text()[preceding-sibling::cut]" mode="xy"/>
WHEN (*)
THEN
NoIDEAToTackleMixedContentFields
...
<xsl:template match="text()" mode="xy">
<xsl:analyze-string select="." regex="[a-zA-Z0-9]">
<xsl:matching-substring>
<xsl:text>#</xsl:text>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
...
私が実行して縮小さXSLTを持っていないが、それにもかかわらず、誰かが私の要件を満たすための方法が表示される場合があります。どのような助けもありがとうございます。次のように
これは重い正規表現ベースのソリューションです(重い文字列操作の質問です)。しかし、後で試してみましょう。解決に時間をとってくれてありがとう。 – uL1