2011-11-18 90 views
0

我想寫一個簡單的SAX解析器,我從Web服務響應接收輸入,它包括轉義字符<和>當我試圖用我的代碼解析它時,我我正在得到參考是不允許在序言。錯誤,如果我將轉義字符更改爲正常<和>字符它解析沒有任何問題,我想我只是在這裏錯過了一些非常簡單的東西...有人可以請幫忙嗎?XML沒有用轉義字符解析

import java.io.ByteArrayInputStream; 
import java.io.FileReader; 
import java.io.InputStream; 

import org.xml.sax.XMLReader; 
import org.xml.sax.Attributes; 
import org.xml.sax.InputSource; 
import org.xml.sax.helpers.XMLReaderFactory; 
import org.xml.sax.helpers.DefaultHandler; 

public class Test extends DefaultHandler { 

    public static void main(String args[]) throws Exception { 
     XMLReader xr = XMLReaderFactory.createXMLReader(); 
     Test handler = new Test(); 
     xr.setContentHandler(handler); 
     xr.setErrorHandler(handler); 

     String xml_string = "&lt;rootnode&gt;&lt;a&gt;hello&lt;/a&gt;&lt;b&gt;world&lt;/b&gt;&lt;/rootnode&gt;"; 
     InputStream xmlStream = new ByteArrayInputStream(xml_string.getBytes("UTF-8")); 
     xr.parse(new InputSource(xmlStream)); 
    } 

    public Test() { 
     super(); 
    } 

    //////////////////////////////////////////////////////////////////// 
    // Event handlers. 
    //////////////////////////////////////////////////////////////////// 

    public void startDocument() { 
     System.out.println("Start document"); 
    } 

    public void endDocument() { 
     System.out.println("End document"); 
    } 

    public void startElement(String uri, String name, String qName, Attributes atts) { 
     if ("".equals(uri)) 
      System.out.println("Start element: " + qName); 
     else 
      System.out.println("Start element: {" + uri + "}" + name); 
    } 

    public void endElement(String uri, String name, String qName) { 
     if ("".equals(uri)) 
      System.out.println("End element: " + qName); 
     else 
      System.out.println("End element: {" + uri + "}" + name); 
    } 

    public void characters(char ch[], int start, int length) { 
     System.out.print("Characters: \""); 
     for (int i = start; i < start + length; i++) { 
      switch (ch[i]) { 
      case '\\': 
       System.out.print("\\\\"); 
       break; 
      case '"': 
       System.out.print("\\\""); 
       break; 
      case '\n': 
       System.out.print("\\n"); 
       break; 
      case '\r': 
       System.out.print("\\r"); 
       break; 
      case '\t': 
       System.out.print("\\t"); 
       break; 
      default: 
       System.out.print(ch[i]); 
       break; 
      } 
     } 
     System.out.print("\"\n"); 
    } 
} 

回答

3

您不應該在xmlstring中使用轉義字符。您需要使用<>作爲xml標記。只有在需要包含<或>時,才能將它們轉義出來,作爲屬性/元素內容的一部分,而不是元素標記本身。

+0

非常感謝克里斯。 –

1

對於普通標籤,應該使用<並>>像< root> ... </root>。只有以實際文字<和>應該轉義爲& lt;和& gt;。