XML не анализируется с помощью Escape-символа

Я пытаюсь написать простой синтаксический анализатор SAX, я получаю входные данные из ответа веб-службы, и он включает escape-символы ‹ и › Когда я пытаюсь проанализировать его с помощью своего кода, я получаю Ссылка не разрешена в прологе. Ошибка, где, как если бы я изменил escape-символы на обычные символы ‹ и >, которые он анализирует без каких-либо проблем, я думаю, что я просто упустил что-то очень простое здесь... может кто-нибудь, пожалуйста, помогите?

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 = "<rootnode><a>hello</a><b>world</b></rootnode>";
        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");
    }
}

person Snehan Solomon    schedule 18.11.2011    source источник


Ответы (2)


Вы не должны использовать escape-символы в xmlstring. Вам нужно использовать < и > для тегов xml. Избегайте их только тогда, когда вам нужно включить ‹ или > как часть содержимого атрибута/элемента, а не самого тега элемента.

person Chris    schedule 18.11.2011

Для обычных тегов следует использовать ‹ и > как ‹ root >...‹ / root >. Только в реальном тексте символы ‹ и > должны быть заменены на < и >.

person Joop Eggen    schedule 18.11.2011