1

XHTML閉じていないタグや破損したタグを残さずに、プログラムで任意の数の単語をプログラムで省略しますか?

すなわち

<p>
    Proin tristique dapibus neque. Nam eget purus sit amet leo
    tincidunt accumsan.
</p>
<p>
    Proin semper, orci at mattis blandit, augue justo blandit nulla.
    <span>Quisque ante congue justo</span>, ultrices aliquet, mattis eget,
    hendrerit, <em>justo</em>.
</p>

25語に省略すると次のようになります。

<p>
    Proin tristique dapibus neque. Nam eget purus sit amet leo
    tincidunt accumsan.
</p>
<p>
    Proin semper, orci at mattis blandit, augue justo blandit nulla.
    <span>Quisque ante congue...</span>
</p>
4

2 に答える 2

1

単語数変数を最新の状態に保ちながら、DOMツリーを繰り返します。単語数が最大単語数を超えたら、「...」を挿入し、現在のノードの後続のすべての兄弟を削除します。次に、再帰をさかのぼって、各祖先の後続の兄弟をすべて削除します。

于 2008-08-29T14:59:06.783 に答える
1

XHTML を要素の階層と考えて、そのように扱う必要があります。これは、基本的に XML の処理方法です。次に、階層を再帰的に調べて、単語の数を一緒に追加します。限界に達したら、他のすべてを投げ捨てます。

私は主に PHP で作業しています。これを行うには、PHP の DOMDocument クラスを使用します。選択した言語でそのようなものを見つける必要があります。

わかりやすくするために、サンプルの階層を次に示します。

- p
    - Proin tristique dapibus neque. Nam eget purus sit amet leo
      tincidunt accumsan.
- p
    - Proin semper, orci at mattis blandit, augue justo blandit nulla.
    - span
          - Quisque ante congue justo
    - , ultrices aliquet, mattis eget, hendrerit, 
    - em
          - justo
    - .

span 要素内で 25 語の制限に達したため、span 内の残りのテキストをすべて削除し、省略記号を追加します。他のすべての子要素 ​​(テキストとタグの両方) を破棄でき、後続のすべての要素を破棄できます。

これにより、私が見る限り、常に有効なマークアップが残るはずです。これは、プレーンテキストだけでなく階層として扱っているため、必要なすべての終了タグが引き続き存在するためです。

もちろん、扱っている XHTML がそもそも無効である場合、出力が有効であるとは期待しないでください。

階層の例が貧弱で申し訳ありません。リストをネストする方法がわかりませんでした。

于 2008-08-29T15:09:06.493 に答える