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

次のように BankRate を設定した場合:

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 に答える