2017-08-30 4 views
1

xmlファイルをsaxで解析する際に問題が発生しました。Javaはxmlファイルを解析するためにsaxを使用します。立ち上げ時に正しい内容を取得できない&

boolean rcontent = false; 

@Override 
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
    if (qName.equalsIgnoreCase("content")) { 
     rcontent = true; 
    } 
} 

@Override 
public void characters(char ch[], int start, int length) throws SAXException { 
    if (rcontent){ 
     System.out.println("content: " + new String(ch, start, length)); 
     rcontent = false; 
    } 
} 
このような

XMLファイルの内容::ここでのコードの一部

Javaコードは次のようにしている enter image description here

しかし、出力は次のようになります。

私は

を言いたいです

これは完全ではありません。

答えて

2

ブロック<content>ブロックでcharacters(...)が複数回呼び出されている可能性があります。試してみてください

StringBuilder builder; 

@Override 
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
    if (qName.equalsIgnoreCase("content")) { 
     builder = new StringBuilder(); 
    } 
} 

@Override 
public void characters(char ch[], int start, int length) throws SAXException { 
    if (builder != null){ 
     builder.append(new String(ch, start, length)); 
    } 
} 

@Override 
public void endElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
    if (builder != null) { 
     System.out.println("Content = " + builder); 
     builder = null; 
    } 
} 
+0

乾杯!それは非常にうまくいく!しかし、なぜ文字(...)が1つのタグに対して複数回呼び出されているのですか?それは&amp;またはそれが最大のサイズを満たしているからですか? –

+0

[javadocs](https://docs.oracle.com/javase/7/docs/api/org/xml/sax/helpers/DefaultHandler.html#characters(char []、%20int、%20int)を参照してください)文字データが「チャンク」されていることを示す。通常は、大量の文字配列をメモリに不必要に置かないようにするために行われます。私は異なったサックスパーサーが文字を別々にチャンクすることを選ぶことができたと推測しているので、チャンクの実装に頼るべきではありません。 –

関連する問題