おそらくこのようなものです(非効率性について事前に謝罪します:
if(currentNode instanceof XMLNodeType.Text)
{
String toWrite = String.format("<![CDATA[%s]]>", currentNode.getText());
// or whatever retrieves text of the node
}
有効なXMLになるには、データをマッサージする必要があるようです。もちろん、このプロセスは入力に大きく依存します。つまり、本質的に発生するのは、有効なXMLに変換する必要のある大きな文字列を受け取ることです。ここでの利点は、サードパーティが準拠するスキーマを定義できることです。これはサードパーティとの会議であるため、議論の範囲外ですが、言及する価値があります。このスキーマを定義すると、どのノードが「テキスト」ノードと見なされ、CDATA
ブロックでラップする必要があるかがわかります。
基本的な考え方は次のとおりです。
List<String> textTags = new ArrayList<String>();
textTags.add("NODE");
//other things to add
String bigAwfulString = inputFromThirdParty();
String validXML = "";
for(String currentNode : bigAwfulString.split("yourRegexHere")
{
if(textTags.contains(currentNode)
{
validXML+=String.format("<![CDATA[%s]]>", currentNode.getText());
continue;
}
validXML+=currentNode;
}