2009-06-11 17 views
2

私は現時点でJDOMに取り組んでいます。私は、本質的に簡単な問題であるべき解決策を考えることはできません。XHTMLをXMLに挿入するには

私は、有効なXHTML文字列があります。次のように私はXMLのDOMにこれを挿入するにはどうすればよい

<b>M&amp;A</b> &euro;

を?

<parentNode>
    <b>M&amp;A</b>
    €
</parentNode>

(このXMLは、その後、ブラウザ用のXHTMLをレンダリングするXSLトランスに消灯)

私が作ってみました次のような「擬似的な」解決方法がありますが、可能かどうかはわかりません。

XMLエンティティではないアンエスケープエンティティが挿入されます。
ReinscapeのみXMLエンタイトし、次にHTML全体をエスケープしてから挿入します。

タラス

答えて

2

JTidyを使って、名前付きエンティティを番号付きのものに変換することができますね。その後、XHTMLも有効なXMLです。

+0

これは私がやったことです: *(/ HTML /体/ノード()) XPathを使用して、身体のすべての子ノードを抽出* JTidy を使用してDOMにHTMLとして入力XHTML断片を解析挿入は、ターゲットXML DOM 唯一の注意点にノードを抽出しました'は有効なXHTMLエンティティであり、有効なHTMLタグではありませんでした。これは、最初のステップでシーケンスを扱わないことを意味しました:'をアポストロフィとして、むしろ6つの個々の文字として扱います。私は'のすべてのインスタンスを数値参照(ハックのビットが動作しますが、動作します)に置き換えて修正しました – Taras

+0

JTidyに番号付きのものへのすべての名前付き実体参照を置き換える方法があると確信しています。コマンドラインでは、これは "-n"です。また、有効なXMLを生成するためのスイッチもあります。私はJavaライブラリが同じことをすることができると思います。 – Tomalak

+0

申し訳ありませんが、スペーシングが少し上に上がってしまいました。私はJTidyで-nプロパティを見つけましたが、HTMLではなくXHTMLを解析するためのオプションを見つけることができませんでした。つまり、入力をHTMLとして解析します。つまり、'エンティティを認識しません。私は実体を見て、エンティティを追加できるかどうかを確認しましたが、運はありません。実際には、エンティティ(EntityTable)を定義するソースコードが見つかりました。'が定義されていませんでした。他の252個のHTMLエンティティは – Taras

0

&ユーロながら、有効なXHTMLエンティティであり、有効なXMLではありません。

残念ながら、私はJDOMについて何も知らないのですが、もし可能であれば、のようにDTD entity declarationsを追加してみてください。そして、おそらく、すべてのXHTMLタグを適切な名前空間に入れてください(<parentNode xmlns:x="http://www.w3.org/1999/xhtml"><x:b>...</x:b></parentNode>

+0

その解決策が考えられましたが、HTML(XHTML?)のすべてのエンタテイメントでこれを行う必要がありました.- http://www.cookwood.com/html/extras/entities.html – Taras

0

は、

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 

+

あなたのXHTMLコンテンツを含む文字列を作成します。この場合、<b>M&amp;A</b> &euro;

+

</html> 

し、文書を取得するために、この文字列を解析します。ルート要素内のすべてのコンテンツを取得します。これはXHTMLコンテンツになり、parentNode要素の中に配置します。コンテンツは別のドキュメントから取得する必要があります。

+1

でした。このアプローチを試してみました。文書の場合、&eruo;はXMLエンティティではないため、文字列には基本的にアンエスケープされたアンパサンドが含まれています。アンパサンドは無効なXMLです。 – Taras

関連する問題