SAX解析器'&'连接问题

5

目前我正使用SAXParser和SAXParserFactory进行处理,但遇到一个问题:在'&'符号处字符串被截断。例如:“Nation Created Our World & everything in it”变成了“everything in it”。

很显然,我不希望出现这种情况。在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个回答

12

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,而您的应用程序只记住了最后一个。


我的错误,但在XML文件中是“Nation Created Our World&everything in it”。我会尝试你建议的。 - Señor Reginold Francis

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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接