无法解析包含特殊字符的值? 使用sax解析器

我是解析字段的新手。 我正在尝试编写解析器代码,但无法获取值包含ampersand(&)的特定标记的值。 请帮我解决。

我的xml文件看起来像

  10145 1800015 B & P Infotech Ltd.  

我尝试过这个java代码,但它没有给我正确的输出。

主要class级

 package com.satya.xmltest; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public class SaxTest { public static void main(String[] args) { SAXParserFactory parserFactory = SAXParserFactory.newInstance(); SaxtestHandler handler=new SaxtestHandler(); try { SAXParser parser = parserFactory.newSAXParser(); parser.parse("C:\\Users\\abc\\Desktop\\test.xml", handler); } catch (Exception e) { } SystemTo systemTo=handler.systemTo; System.out.println("Uid :"+systemTo.getUid()); System.out.println("serial number :"+systemTo.getSerialNumber()); System.out.println("name :"+systemTo.getName()); } } 

处理程序类

在此类中,完成解析并将数据值设置为数据容器类。

 package com.satya.xmltest; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxtestHandler extends DefaultHandler { String content = ""; SystemTo systemTo=new SystemTo(); @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { switch (qName) { case "system": System.out.println("inside company"); break; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { switch (qName) { case "u_id": systemTo.setUid(content); break; case "serial_no": systemTo.setSerialNumber(content); break; case "branch_name": systemTo.setName(content); break; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { content = String.copyValueOf(ch, start, length).trim(); } } 

数据容器类

 package com.satya.xmltest; public class SystemTo { private String uid; private String serialNumber; private String name; public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getSerialNumber() { return serialNumber; } public void setSerialNumber(String serialNumber) { this.serialNumber = serialNumber; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

我的输出是:

 Uid: 10145 serial number: 1800015 name: null 

但是我需要:

 Uid: 10145 serial number: 1800015 name: B & P Infotech Ltd. 

提前致谢。

XML中的某些字符不能以XML文档的文字forms出现,除非用作标记分隔符或在注释,处理指令或CDATA部分中使用。
字符列表及其对应的实体或要替换的数字引用:

 Original Character XML entity replacement XML numeric replacement " " " < < < > > > & & & ' ' ' 

在解析之前,必须在XML中替换上面的字符。

对于非标记的文本,您可以使用CDATA部分构成文档的字符数据

你可以像html一样逃避这些chars:

 B & P Infotech Ltd. 

或者您使用CDATA:

  

问题是“&”是一个自我逃脱的角色。

要解决此问题,您需要使用等效的unicode替换&符号,即:“ &

必须使用XML文件接受的字符替换特殊字符。 在你的情况下,应该用&amp;

 @Override public void characters(char[] ch, int start, int length) throws SAXException { content = String.copyValueOf(ch, start, length).trim(); content = content.replace("&", "&") }