Java 未使用转义字符分析XML
我正在尝试编写一个简单的SAX解析器,我正在接收来自Web服务响应的输入,它包括转义字符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
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标记使用
。仅当需要将