3

特定のアプリケーション (XMPP PubSub アイテム ペイロードを介して転送するためにオブジェクトをシリアライズおよびデシリアライズする) では、XML フラグメントを作成する必要があります。これは、ドキュメント宣言を省略する必要があるためです。

org.xmlpull.v1.XmlSerializerクラスを使用しています。残念ながら、正しい使用法に関するドキュメントはあまりないようです。少なくともそのメソッドで見つけたすべてのドキュメントでは、startDocument()このメソッドの呼び出しをスキップできるかどうかが不明です。少なくとも私が見つけたすべての例は、このメソッドを呼び出しています (ただし、それらはすべて、完全な XML ドキュメントを作成する方法のみを説明しており、フラグメントはありません)。

コード例を示すには:

XmlSerializer xmlSerializer = Xml.newSerializer();
StringWriter xmlStringWriter = new StringWriter();

try {
    xmlSerializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
    xmlSerializer.setOutput(xmlStringWriter);

    // xmlSerializer.startDocument("UTF-8", true);

    xmlSerializer.startTag(null, "tag-name");
    // ...
    xmlSerializer.endTag(null, "tag-name";

    // xmlSerializer.endDocument();

    xmlSerializer.flush();
} catch (IOException e) {
    // Hanle exception
}
String xmlOutputString = xmlStringWriter.toString();

これは許されますか?そうでない場合、ドキュメント宣言を手動で削除するために、出力文字列を解析せずに XMLSerializer でフラグメントを生成する他の方法はありますか (たとえば、nullパラメーターのみで startDocument を呼び出すなど)?

4

1 に答える 1

4

簡単に言えば、答えは次のとおりです。いいえ、呼び出すstartDocument()必要はなく、ドキュメント宣言の生成をスキップします。

于 2013-07-26T12:06:35.110 に答える