我正在编写一些代码,这些代码与需要以下元素的遗留系统进行对话:
<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[ ]]>");
我得到了字符实体(这不是我想要的)
答案 0 :(得分: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 Type不是文本,而是忽略空格的其他类型。如果您确实需要将空格作为BankRate的值,则必须使用XmlCursor注入它。
答案 1 :(得分:1)
所以,我正在尝试重新创建你的场景。这是一个简单的模式,其元素是字符串类型。
<?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。在您的问题中,空间似乎缺失。这与您的问题有何不同?