2017-09-24 85 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();}