我正在编写一些代码,这些代码与需要以下元素的旧式系统进行通讯:

<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注入它。

08-05 14:16