私はXMLにHTMLを表す文字列を持つノードがあるという問題に直面しています。 私はこの文字列をカットする必要がありますが、もちろん、これはinvalide HTML-Markup(例えば、文字を常に30文字後に切り捨てると、</ul>
のような閉じ要素を簡単に失うことがあります。 どうすればよいですか? 私はGoogleを介して本当の助けを見つけることができないので、非常に難しいようです。XSLT:文字列をXMLノードセットとして解析します(具体的には、HTML-Stringをノードセットに変換します)?
これまでのところ、 "analyze-string"とregexでノードと内容を選択し、それらにes XML-element-nodesを書きます。 しかし、すべてのケース、特にネストしたノードを扱うには大きな問題が発生します。
誰かに考えがありますか? FYI
:私のメモ帳:
- 正規表現:最初のタグに正規表現の最初のノード
- プットタグ名の
- 読むのタグ名をキャッチし、全体のタグを検索し、(行くためにも、文字列の残りの部分を選択しますそれ以降に)
- 内容を確認:他のタグ?はい: - >ステップ1、無: - >ステップ5
- 書き込みタグノード要素として
- 文字列のテイクレスト - >ステップ1
ここでは、XML-docのです:私は何をしたいか
<?xml version="1.0" encoding="UTF-8"?>
<html>
<data>
<![CDATA[
<h2>header</h2><p>A little article. <b>Here</b> it's already done!</p>
]]>
</data>
</html>
:
私は文字列(html)を持っていて、特別な量の文字を出力したいとします。最初の25)。 <p>
-Tagではないので、私はHTML出力にこの文字列を入れて次のステップで
"<h2>header</h2><p>A little article"
が、この時点で私は、無効なマークアップを取得します:私は単なる文字列でこれを行うと、私はこの結果を得ます閉まっている。
私の最初のアプローチ:この文字列を解析して各タグのXML-Nodesを取得し、各ノードに行き、xml要素を書き込んで(最後のタグが有効であることを確認します)、この例では25文字に制限されています。
質問にXMLドキュメントを含めることができます。 – ColinE
入力XMLを制御できますか? CDATAタグを使用していない場合は、可能性があります。 CDATAタグでは、HTML文字列はテキストの汎用文字列としてのみ扱われ、HTMLタグでは簡単に解析できません。 CDATAタグを削除してから、一致するタグを開始することができます... –
あなたの質問を編集し、変換の結果を提供してください。どの文字列を "削除"したいのかははっきりしていません。 –