java - 将 CDATA 添加到 XmlObject

标签 java xmlbeans

我正在编写一些与需要以下元素的遗留系统通信的代码:

<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/

相关文章:

java - 使用 Java 在 Eclipse 中进行 CEF 开发

java - 使用 Xml Bean 编写格式化的 xml

Java XMLBeans 抛出 NoSuchMethod 错误

java - Box2D 多边形体不旋转

java - 用于检查节点是否存在的 JAXB boolean Getter

java - 具有 xmlbean 绑定(bind)的 Axis2 maven 插件生成未知符号 innerType 和 addNew()

java - 如何摆脱 xmlbeans-maven-plugin 生成的代码中的泛型警告?

java - CXF 2.x 和 Jboss AS 7.1.1

java - 从html文件获取文本字段字符串输入以在java类中处理/使用

java - 为什么测试中的某些硬编码值会影响其他值?