3

SAXパーサー(Androidの場合)を使用して、Webサービスからxmlファイルを解析しています。一部の要素では、CDATAが切り捨てられて完全ではありません。たとえば、XMLファイルには次のようなデータが含まれています。

 <name><![CDATA[Gölsder und Ginck GmbH]]></name> 

xmlファイルを解析した後

public void characters(char[] ch, int start, int length)
   throws SAXException {
   super.characters(ch, start, length);
   String text = new String(ch, start, length);

テキストには「GölsderundGin」(最初の15文字)のみが含まれています。eclipseでデバッグしたところ、文字列全体がメソッドの「char[]ch」引数に含まれていないことがわかりました。したがって、解析自体にエラーがあるようです

4

2 に答える 2

3

私もこの問題を抱えていました。問題は、characters()メソッドが同じ要素で複数回呼び出される可能性があることです。あなたの場合、これを書くとしたら:

public void characters(char[] ch, int start, int length)
   throws SAXException {
   super.characters(ch, start, length);
   String text = new String(ch, start, length);
   Log.d("XMLTEST", text);
}

おそらく、 oneGölsder und Ginと oneの 2 つのログ メッセージが表示されますck GmbH

結論として、新しい文字を受け取るときに連結するメンバー変数が必要です。

于 2010-08-03T19:17:16.907 に答える
0

これは、フェリックスの投稿を読んだ後の私の回避策です

private String text;

@Override
public void endElement(java.lang.String uri,
                       java.lang.String localName,
                       java.lang.String qName)
        throws SAXException {
       text = null;
}

@Override
public void characters(char[] ch, int start, int length)
        throws SAXException {
    super.characters(ch, start, length);
    if(text != null){
        text += String.copyValueOf(ch, start, length);
    } else {
        text = String.copyValueOf(ch, start, length);
    }
}
于 2015-05-28T07:09:11.513 に答える