Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未使用转义字符分析XML_Java_Xml_Sax - Fatal编程技术网

Java 未使用转义字符分析XML

Java 未使用转义字符分析XML,java,xml,sax,Java,Xml,Sax,我正在尝试编写一个简单的SAX解析器,我正在接收来自Web服务响应的输入,它包括转义字符当我尝试使用代码解析它时,我得到了prolog中不允许的引用。错误,如果我将转义字符改为正常的字符,它正在解析,没有任何问题,我想我只是缺少了一些非常简单的东西。。。有人能帮忙吗 import java.io.ByteArrayInputStream; import java.io.FileReader; import java.io.InputStream; import org.xml.sax.XMLR

我正在尝试编写一个简单的SAX解析器,我正在接收来自Web服务响应的输入,它包括转义字符当我尝试使用代码解析它时,我得到了prolog中不允许的引用。错误,如果我将转义字符改为正常的字符,它正在解析,没有任何问题,我想我只是缺少了一些非常简单的东西。。。有人能帮忙吗

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");
    }
}
import java.io.ByteArrayInputStream;
导入java.io.FileReader;
导入java.io.InputStream;
导入org.xml.sax.XMLReader;
导入org.xml.sax.Attributes;
导入org.xml.sax.InputSource;
导入org.xml.sax.helpers.XMLReaderFactory;
导入org.xml.sax.helpers.DefaultHandler;
公共类测试扩展了DefaultHandler{
公共静态void main(字符串args[])引发异常{
XMLReader xr=XMLReaderFactory.createXMLReader();
测试处理程序=新测试();
xr.setContentHandler(handler);
xr.setErrorHandler(handler);
String xml_String=“rootnodeahollo/abworld/b/rootnode”;
InputStream xmlStream=newbytearrayinputstream(xml_string.getBytes(“UTF-8”);
parse(新输入源(xmlStream));
}
公开考试(){
超级();
}
////////////////////////////////////////////////////////////////////
//事件处理程序。
////////////////////////////////////////////////////////////////////
公开作废开始文件(){
System.out.println(“开始文档”);
}
公共文件(){
系统输出打印项次(“结束文件”);
}
public void startElement(字符串uri、字符串名称、字符串qName、属性atts){
如果(“.”等于(uri))
System.out.println(“起始元素:+qName”);
其他的
System.out.println(“起始元素:{“+uri+”}”+name);
}
公共void endElement(字符串uri、字符串名称、字符串qName){
如果(“.”等于(uri))
System.out.println(“结束元素:+qName”);
其他的
System.out.println(“结束元素:{“+uri+”}”+name);
}
公共无效字符(字符ch[],整数开始,整数长度){
System.out.print(“字符:\”);
对于(int i=开始;i<开始+长度;i++){
开关(ch[i]){
案例“\\”:
系统输出打印(“\\\”);
打破
案例'':
System.out.print(“\\\”);
打破
案例“\n”:
系统输出打印(\\n);
打破
案例'\r':
系统输出打印(\\r”);
打破
案例'\t':
系统输出打印(\\t);
打破
违约:
系统输出打印(ch[i]);
打破
}
}
系统输出打印(“\”\n”);
}
}

您不应该在
xmlstring
中使用转义字符。您需要对xml标记使用
。仅当需要将<或>作为属性/元素内容的一部分而不是元素标记本身时才对其进行转义。

xmlstring
中不应使用转义字符。您需要对xml标记使用
。仅当需要将作为属性/元素内容的一部分而不是元素标记本身时,才将其转义。

对于普通标记,应使用。只有在实文本中,应转义到<;及>

对于正常标记,应使用。只有在实文本中,应转义到<;及>