2017-09-24 108 views
0

我解析XML文檔中的一些數據,然後將其寫回到另一個XML文檔。我遇到了一個問題,原始數據中的數據是用CDATA部分寫的。XML字符實體參考

這是輸入的例子:

<actions><![CDATA[<div> 
check that&#39;s is sent </div> 

我簡單地更換DIV,P等與substring功能,但我的輸出是

<logical>check that &amp;#39; is sent </logical> 

我要輸出到內容似乎是相同的輸入:

<logical>check that's is sent </logical> 

我試過使用子字符串以及,像這樣:

string= string.replaceAll("&#\\d+;", " 39"); 

但現在的問題是,這個數量是可變的,所以我需要與&#numl;

內的數量,以取代目前的regex另外,串可包含許多數字,所以我不能只是尋找一些在它裏面,像這樣:

check that&#39;s is sent and&#42;s is received 
+0

解析如何?爲什麼不使用像DOM或SAX這樣的java中現有的XML解析器? – Progman

+0

我將標題更改爲引用XML實體以允許人們識別問題。修正了標點符號和佈局。 –

+0

@Progman我在上面說過,文本是在Cdata部分編寫的,我使用DOM解析它,但我仍然得到一個包含標籤和轉義字符的文字XML文本,我不知道他爲什麼將他的文本存儲在cdata部分,但是我在這種情況下,我是前端,我必須處理它。 – ASayed

回答

0

我用這個功能來查找數字字符引用的所有事件,並與只數歸還

public static String decode(String str) { 
    StringBuffer sb = new StringBuffer(); 
    int i1=0; 
    int i2=0; 

    while(i2<str.length()) { 
     i1 = str.indexOf("&#",i2); 
     if (i1 == -1) { 
      sb.append(str.substring(i2)); 
      break ; 
     } 
     sb.append(str.substring(i2, i1)); 
     i2 = str.indexOf(";", i1); 
     if (i2 == -1) { 
      sb.append(str.substring(i1)); 
      break ; 
     } 

     String appnd = str.substring(i1+2, i2); 




      sb.append(" "+appnd); 

     i2++ ; 
    } 
    return sb.toString();}