我正在编写一些代码,这些代码与需要以下元素的旧式系统进行通讯:
<BankRate><![CDATA[ ]]><BankRate>
我终生无法完成这项工作,到目前为止,我的尝试是:
parent.setBankRate(" ");
XmlCursor cursor = cc.xgetBankRate().newCursor();
cursor.toFirstContentToken();
cursor.setBookmark(CDataBookmark.CDATA_BOOKMARK);
cursor.dispose();
这只会导致以下结果:
<BankRate><BankRate>
父级的选项是:
setSaveCDataEntityCountThreshold(0).setSaveCDataLengthThreshold(0);
如果我像下面这样设置BankRate:
cc.setBankRate("<![CDATA[ ]]>");
我得到角色实体(这不是我想要的)
最佳答案
我尝试了以下测试:
import org.apache.xmlbeans.*;
public class main {
public static void main ( String[] args ) throws XmlException {
XmlObject x = XmlObject.Factory.parse( "<BankRate> </BankRate>" );
XmlCursor c = x.newCursor();
c.toFirstContentToken();
c.toNextToken();
c.setBookmark(CDataBookmark.CDATA_BOOKMARK);
XmlOptions options = new XmlOptions();
options.setSaveCDataLengthThreshold( 1 );
options.setUseCDataBookmarks();
System.out.print( x.xmlText( options ) );
}
}
结果是:
<BankRate><![CDATA[ ]]></BankRate>
如果您的目标是强制将BankRate的内容另存为CDATA,则可以这样做。
但是,如果这不起作用,并且您没有得到任何(空元素)作为BankRate的值,那么可能发生的情况是BankRate Type不是文本,而是其他一些忽略空格的类型。如果确实需要获取空白作为BankRate的值,则必须使用XmlCursor注入它。