2012-03-08 8 views
1

私のプロジェクトでFreemarkerを使用して、あるXMLドキュメントから別のXMLドキュメントに変換しています。 私たちのサプライヤは、不自然なデザインや標準的なメッセージフォーマットの選択のために、選択したメッセージ標準がすべてのタイプの拡張を処理しないため、CDATAエスケープフィールドにXMLを埋め込むことを選択しました。どんな理由であれ、私は今この分野を掘り下げ、いくつかのxpathクエリを行う必要があります。FreemarkerでCDATAエスケープされたXMLを処理する

セイすなわち:

<Invoice> 
    .. 
    <Note><![CDATA[<?xml version="1.0" encoding="utf-8"?><a><b>Value</b></a>]]></Note> 
</Invoice> 

誰もが持っているこのようなシナリオでは、値 "A/B /テキストを()" を取得する方法のアイデア?

私はCDATAセクションを手作業でクリーニングしてからXMLとして解析しようと考えましたが、Freemarkerがこれを行うことができると私は期待しています。

+0

コメントはありません。 –

+0

非常にばかげた...私は私の質問がかなり明確だと思った。そして、そこにあるXMLの狂信者にとって:はい私はあなたがCDATAセクションを解析するはずがないことを知っています。そのレッスンには、完全に同意してください。しかし、このケースでは、サプライヤーが大きくて残念ながら、私がXML標準に関して何を言わなければならないか聞いていないので、私は選択肢がありません。 – Billybong

答えて

1

FreeMarkerはXMLを解析しません。FreeMarkerはこれを行うために通常のAPIを呼び出します。したがって、FreeMarkerはここで助けません。 Stringchar[]など)にXMLファイルをロードし、それらのCDATA「タグ」を削除し、Stringjavax.xml.parsers.DocumentBuilderというDOMツリーに解析し、FreeMarkerに渡す必要があります。しかし、その前にNodeMode.simplify(theDomTree)に電話することをお勧めします。

+0

あなたはそうです。ラッピングXMLをDOMに解析し、FM内でXPathクエリを使用して個々のフィールドを取得しているとは言いませんでした。私の解決策は、ユーティリティクラスをBeanにバインドし、Beanが評価するXPath式と共にCDATAフィールドを一緒に送信することでした。スムーズな解決策ではありませんが、確かに効果がありました。 – Billybong

1

XMLを再解析することをお勧めします。 CDATAは、文字データとして扱われることを意味します。

関連する問題