SAXParser'&'连接问题

时间:2010-07-28 15:58:54

标签: java xml sax

我目前正在使用SAXParser与SAXParserFactory,我遇到了一个问题,字符串被切断'&'符号。例如:“国家创造了我们的世界及其中的一切”成为“其中的一切”。

显然,我不希望这种情况发生。在xml输入中,角色被正确转义为&。我该如何解决这个问题?

try{
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();

            /* Get the XMLReader of the SAXParser we created. */
            XMLReader r = sp.getXMLReader();

            //This handles the xml and populates the entries array
            XMLHandler handler = new XMLHandler();


            // register event handlers
            r.setContentHandler(handler);
            String url = "http://foobar.xml";
            r.parse(url);

            return handler.getEntries();
}

我在DefaultHandler类

中有这个
....
    public void characters( char ch[], int start, int length ){
           String value = new String( ch , start , length );

           if(!value.trim().equals("")) {

               if( currentElement.equalsIgnoreCase("TITLE") ) {
                   tempEntry.setTitle(value);
               }
....

2 个答案:

答案 0 :(得分:11)

SAX API不保证任何给定的文本节点将以单件形式交付。允许将其分解为对characters()方法的多次调用。您的应用程序必须适应这种情况,并自行重新组装。

顺便说一下,Nation Created Our World & everything in it不是有效的XML文本片段,它必须是Nation Created Our World & everything in it。在这种情况下,SAX解析器可能会将其分解为Nation Created Our World&everything in it,而您的应用只会记住最后一个。

答案 1 :(得分:3)

谢谢skaffman

实施,

public void startElement(String s, String s1, String elementName, Attributes attributes) throws SAXException {
    // clear tmpValue on start of element
    tmpValue = "";
}

public void characters(char[] ac, int i, int j) throws SAXException {
    tmpValue += new String(ac, i, j);
}