我正在编写一些与需要以下元素的遗留系统通信的代码:
<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 类型不是文本,而是忽略空格的其他类型。如果您确实需要获取空格作为 BankRate 的值,则必须使用 XmlCursor 注入(inject)它。
关于java - 将 CDATA 添加到 XmlObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10344610/