2012-09-23 276 views
1

下列標記是我的XML:無法解析使用SAX解析器

<Body> 
    <tag1 xmlns=""> <innerTag></innerTag> </tag1> 
    </Body> 

的問題是,我不能夠進去<tag1></tag1>的字符串,是<innerTag></innerTag>。以下是我的邏輯:

public void startElement(final String uri, final String localName, 
      final String qName, final Attributes attributes) 
      throws SAXException { 
     if ("tag1".equalsIgnoreCase(qName)){ 
      inTag1 = true; 
      System.out.println("start"); 
     } 
} 


public void endElement(final String uri, final String localName, 
      final String qName) throws SAXException { 
     if ("tag1".equalsIgnoreCase(qName)) { 
      System.out.println("end"); 
      inTag1 = false; 
     } 
} 

public void characters(final char[] ch, final int start, final int length) { 

     if (inTag1) { 
      System.out.println("@@@" + new String(ch, start, length)); 
     } 
    } 
} 

但它是給我空輸出。任何人都可以幫忙

+0

'innerTag'是一個元素不是字符串或文本節點。如果你想打印它,你必須在'startElement'和'endElement'回調中完成。 – Alex

+0

''將由'startElement'處理(並通過'endElement'關閉標籤,只在您的條件的其他部分打印'qname')。所以'字符'處理程序不會看到它們。 – martijno

回答

1

在以UVM的回答你的評論中寫道

其實內標籤是這個XML中的一種XML的。所以,我想,作爲一個整體

有沒有辦法告訴SAX解析器無法處理所有的元素中的XML,並作爲一個字符串返回的全部內容。從本質上講,你有兩個選擇:

  • 重建XML字符串,通過監聽到所有的SAX事件,並構建XML字符串了自己,或者
  • 如果在XML文檔的控制是你試圖解析,改變它們的格式,像

    <Body> 
        <tag1 xmlns=""><![CDATA[ <innerTag></innerTag> ]]></tag1> 
    </Body> 
    
0

您需要檢查"innerTag"這一翻譯的"tag1"

if ("innerTag".equalsIgnoreCase(qName)){ 
      inTag1 = true; 
      System.out.println("start"); 
     } 

基本上你innerTag是tag1.So SAX解析器的子元素繼續解析,因爲它,它是直到一個有效的XML元素。

+0

實際上,內層標籤是這種xml中的一種xml。所以我想要整體。 – Rookie

+1

你不會這樣做,因爲SAX解析器在基於事件的解析中。如果完全如果你想要的話,你將不得不手動完成它。在上面的代碼中,如果解析器看到這個innertag,那麼你需要構造它xml字符串自己 – UVM