0

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

<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);

如果我 setBankRate 如下:

cc.setBankRate("<![CDATA[        ]]>");

我得到了角色实体(这不是我想要的)

4

2 回答 2

1

我尝试了以下测试:

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。

于 2012-04-30T14:44:31.803 回答
0

所以,我正在尝试重新创建您的场景。这是一个简单的模式,其中包含一个字符串类型的元素。

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Moo" type="xs:string">
  </xs:element>
</xs:schema>

这是一个实例化类型的程序,将值设置为几个空格并保存它。

import org.apache.xmlbeans.*;
import noNamespace.*;

public class main {
    public static void main ( String[] args ) throws XmlException {
        MooDocument moo = MooDocument.Factory.newInstance();
        moo.setMoo( "     " );
        System.out.print( moo.xmlText() );
    }
}

结果是:

<Moo>     </Moo>

您可以通过在文本前注入 CDATA 书签来强制 CDATA。在您的问题中,空格似乎丢失了。这与您的问题有何不同?

于 2012-05-03T09:07:51.247 回答