1

XML を含む Java 文字列があります。CData 内のすべてのテキスト ノードをラップするこの Java String を読みたいのですが、これを行う方法がわかりません。これを行う理由は、文字列を解析しようとすると例外が発生する山かっこを含むテキスト ノードであるためです。誰でも私を助けることができますか?

<node> this < is text <node> <node2> this is < text <node2>

XMLReader を使用してこのテキストを文字列として読み取り、テキストの周りに CData を挿入する簡単な方法があるかどうかを知りたい

ありがとう

ステファン

4

2 に答える 2

2

おそらくこのようなものです(非効率性について事前に謝罪します:

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;
}
于 2013-01-04T14:02:08.567 に答える