我有這樣一個xml:以內部XML使用SAX
<Message xmlns="uri_of_message">
<VendorId>1234</VendorId>
<SequenceNumber>1</SequenceNumber>
...other important headers...
<Data>
<Functions xmlns="uri_of_functions_subxml">
<Function1 attr="sth">
<Info>Some_Info</Info>
</Function1>
<Function2>
<Info>Some_Info</Info>
</Function2>
...Functions n...
</Functions>
</Data>
</Message>
我需要提取內部XML
<Functions xmlns="uri_of_functions_subxml">
<Function1 attr="sth">
<Info>Some_Info</Info>
</Function1>
<Function2>
<Info>Some_Info</Info>
</Function2>
...Functions n...
</Functions>
我人首先試圖得到內部XML與字符的方法:
public void startElement(String uri, String localName, String tagName, Attributes attributes) throws SAXException {
if (tagName.equalsIgnoreCase("Data")){
buffer = new StringBuffer();}
}
public void characters(char[] ch, int start, int length) throws SAXException {
if (buffer != null) {
buffer.append(new String(ch, start, length).trim());
}
}
public void endElement(String uri, String localName, String tagName) throws SAXException {
if (tagName.equalsIgnoreCase("Data")){
innerXML = buffer.toString().trim();
}
但是後來我意識到字符方法沒有正確收集xml,它可能會拒絕特殊字符,如「<「,」>「。
下面的鏈接包含相同的問題,但答案不適用於我,因爲外部xml必須處理爲握手信號的種類,內部xml必須以完全不同的方式處理。
Java XML parsing: taking inner XML using SAX
只有我需要的是正確地收集內部XML。但是,怎麼做呢? 在此先感謝..
你似乎並不理解SAX如何工作。您不能將XML標記視爲字符方法的內容。這種方法只能讀取XML文檔的***文本節點***(標籤之間的東西)。您的問題似乎更像是[StAX](http://en.wikipedia.org/wiki/StAX)的工作,而不是SAX。如果您準備好接受非SAX答案,我會告訴你如何做到這一點。 – predi
我開始使用SAX時不明白的東西是當SAX框架在xml文檔中遇到不同類型的東西時調用的回調函數。 –