2017-05-15 10 views
0

私はgoogleにしようとしましたが、私はどこでもこの質問に関する最初の人だと思います;)私はStreamingMarkupBuilderを見つけましたが、これは主に私が必要はありません。私は追加する方法と作成しない方法を理解できませんでした。Groovyの既存のXMLにCDATAコンテンツを追加する方法

は、だから、私はかなりのXMLがあります。

<root> 
    <ducks> 
    <rubberduck /> 
    </ducks> 
</root> 

をし、私が望むすべては私のrubberduckyためCDATAを追加することです:私はXmlSlurperreplaceBodyを使用しますが、これはCDATAをESPACEます

<root> 
    <ducks> 
    <rubberduck><![CDATA[Best Duck Ever!]]></rubberduck> 
    </ducks> 
</root> 

ファースト-タグ。

私はWebサービスへのリクエストに必要なGroovyにCDATAを追加するだけですか? Javaで私はちょうど使用するでしょう ducksNode.appendChild(rootDoc.createCDATASection("...."))

私はGroovyに慣れてきて、Javaよりも簡単で高速です。

答えて

0

基本的には、GroovyでもJavaでできることは、多少なりとも同じ方法で行うことができます。

なぜ、それをCDATAセクションにする必要がありますか?テキストを設定するだけで、Groovyは自動的にエスケープする必要のある文字をエスケープし、CDATAセクションを廃止します。

+0

それは、Webサービスのための要求だとWebServiceが、残念ながらCDATAセクション内のデータを期待しています。私はJavaを使っていなければならないと思うので、すばやく簡単なGroovyがこのような単純な作業では不可能だとは信じられませんでした。 – MushyPeas

+0

全く必要ないので。 CDATAセクションは透明でなければなりません。 CDATAセクションまたはそれに応じて引用されたコンテンツを持っているかどうかにかかわらず、何の違いもないはずです。たとえあなたがXMLを解析してJavaでそのまま書き出すとしても、CDATAセクションはなくなります。 – Vampire

0

mkp.yieldUnescapedgroovy.xml.MarkupBuilderを使用します。

import groovy.xml.* 

def sw = new StringWriter() 
def builder = new MarkupBuilder(sw) 

builder.root { 
    ducks { 
     rubberduck { 
      mkp.yieldUnescaped("<![CDATA[" + "Best Duck Ever!" + "]]>") 
     } 
    } 
} 

println sw.toString() 
+0

しかし、まさに私が使えないもの、あなたは私のXMLを再構築している、私は既にXMLを持っている。 Ofcのアヒルは単なる例であり、それははるかに複雑であり、すでに存在しているにもかかわらず、それを "再構築"する努力は価値がありません。 – MushyPeas

関連する問題