我正在使用以下标签获取XML。我要做的是,使用Sax解析器使用Java读取XML文件并将其保存到数据库。但似乎在p标记后有空格,如下所示。

     <Inclusions><![CDATA[<p>                                               </p><ul> <li>Small group walking tour</li> <li>Entrance fees</li> <li>Professional guide </li> <li>Guaranteed to skip the long lines</li> <li>Headsets to hear the guide clearly</li> </ul>
                <p></p>]]></Inclusions>


但是,当我们将读取的字符串插入数据库(PostgreSQL 8)时,它会为这些空格打印如下所示的不良字符。


  \ 011 \ 011 \ 011 \ 011 \ 011 \ 011 \ 011 \ 011 \ 011 \ 011 \ 011 \ 011 \ 011小
  团体徒步游入场费专业指导
   保证跳过长线耳机听
  该指南明确\ 012 \ 011 \ 011 \ 011 \ 011 \ 011



我想知道为什么打印这样的坏字符(011 \ 011)吗?
用java删除XML标记内的空格的最佳方法是什么? (或如何防止这些不良字符。)


我已经检查了样本,其中大多数都使用python样本。

这就是XML在我的程序中与SAX一起读取的方式,

方法1

  // ResultHandler is the class that used to read the XML.
  ResultHandler handler         = new ResultHandler();
   // Use the default parser
  SAXParserFactory factory = SAXParserFactory.newInstance();
    // Retrieve the XML file
    FileInputStream in = new FileInputStream(new File(inputFile)); // input file is XML.
    // Parse the XML input
    SAXParser saxParser = factory.newSAXParser();
    saxParser.parse( in , handler);


这是ResultHandler类用于使用Method-1读取XML作为Sax解析器的方式

import org.apache.log4j.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

// other imports

    class ResultHandler extends DefaultHandler {

        public void startDocument ()
        {
            logger.debug("Start document");
        }

        public void endDocument ()
        {
            logger.debug("End document");
        }

        public void startElement(String namespaceURI, String localName, String qName, Attributes attribs)
        throws SAXException {
            strValue = "";
            // add logic with start of tag.
        }

        public void characters(char[] ch, int start, int length)
        throws SAXException {
            //logger.debug("characters");
            strValue += new String(ch, start, length);
            //logger.debug("strValue-->"+strValue);
        }

        public void endElement(String namespaceURI, String localName, String qName)
        throws SAXException {
            // add logic to end of tag.
        }
    }


因此,需要知道如何使用sax解析器设置setIgnoringElementContentWhitespace(true)或类似值。

最佳答案

您可以尝试为您的DocumentBuilderFactory设置

setIgnoringElementContentWhitespace(true)

因为这:


  由于依赖于内容模型,因此此设置需要解析器
  处于验证模式


您还需要设置

setValidating(true)

或者str= str.replaceAll("\\s+", "");可能也可以

10-08 09:41