Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java删除XML标记内的空白_Java_Xml - Fatal编程技术网

使用java删除XML标记内的空白

使用java删除XML标记内的空白,java,xml,Java,Xml,我正在获取带有以下标记的XML。我要做的是,使用Sax解析器用Java读取XML文件并将其保存到数据库中。但是在p标签后面似乎有空格,如下所示 <Inclusions><![CDATA[<p> </p><ul> <li>Small group walking tour</li> <li>Entrance f

我正在获取带有以下标记的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>
这就是ResultHandler类使用方法1作为Sax解析器读取XML的方式

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)或类似设置

  • 我也在寻找一个确切的答案。但我认为这对你有帮助。
    C/Modula-3八进制表示法;vs在
    上面说

    • \011表示水平选项卡(ASCII HT)
    • \012用于换行(ASCII NL,换行)
  • 可以用一个空间替换多个空间,如下所示

    str=str.replaceAll(“\s([\s])+”,“”)

  • 我也在寻找一个确切的答案。但我认为这对你有帮助。
    C/Modula-3八进制表示法;vs在
    上面说

    • \011表示水平选项卡(ASCII HT)
    • \012用于换行(ASCII NL,换行)
  • 可以用一个空间替换多个空间,如下所示

    str=str.replaceAll(“\s([\s])+”,“”)


  • 您可以尝试为
    DocumentBuilderFactory

    因此:

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

    您还需要设置


    或者
    str=str.replaceAll(“\\s+”,”)
    也可以工作

    您可以尝试为您的
    DocumentBuilderFactory设置

    因此:

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

    您还需要设置


    或者
    str=str.replaceAll(“\\s+”,”)
    也可以使用google检查识别的输入。replaceAll(“\\s{2,},”).trim();这将是一个解决方案。但主要的问题是,为什么要为空间打印糟糕的字符?使用这种方法,我们必须纠正每个XML标记?有并没有通用的解决方案来对整个XML进行排序?通过google检查来识别输入。replaceAll(“\\s{2,},”).trim();这将是一个解决方案。但主要的问题是,为什么要为空间打印糟糕的字符?使用这种方法,我们必须纠正每个XML标记?是否有通用的解决方案来整理整个XML?请让我知道,我们如何将该属性设置为以下编码。ResultHandler oHandler=新的ResultHandler();CreateParser=新的CreateParser(oHandler);InputSource输入=null;尝试{input=newinputsource(newStringReader(this.responeXml));input.setEncoding(“UTF-8”);parser.parse(input);}catch(Exception e){logger.error(“----parse中的Exception------”,e);}@RuchiraKariyawasam,我很难找到您正在使用的ResultHandler和CreateParser类。你能告诉我你在使用什么库吗?@Andrel我已经编辑了我的问题,只使用方法1。这些是在我的课堂上使用的导入。导入org.xml.sax.Attributes;导入org.xml.sax.InputSource;导入org.xml.sax.SAXException;导入org.xml.sax.helpers.DefaultHandler;好的,我正在看这个。看起来ContentHandler ignorableWhitespaces中有一个方法,但无论如何您都不会使用它。在characters()中,您可以轻松地进行修剪()…但由于CDATA标记的原因,您无法消除空白,这就是阻止进行修剪。有很多人试图使用堆栈从CDATA获取数据。你可以试试,我运气不太好。希望这将帮助您解决问题。请让我知道,我们如何将该属性设置为以下编码。ResultHandler oHandler=新的ResultHandler();CreateParser=新的CreateParser(oHandler);InputSource输入=null;尝试{input=newinputsource(newStringReader(this.responeXml));input.setEncoding(“UTF-8”);parser.parse(input);}catch(Exception e){logger.error(“----parse中的Exception------”,e);}@RuchiraKariyawasam,我很难找到您正在使用的ResultHandler和CreateParser类。你能告诉我你在使用什么库吗?@Andrel我已经编辑了我的问题,只使用方法1。这些是在我的课堂上使用的导入。导入org.xml.sax.Attributes;导入org.xml.sax.InputSource;导入org.xml.sax.SAXException;导入org.xml.sax.helpers.DefaultHandler;好的,我正在看这个。看起来ContentHandler ignorableWhitespaces中有一个方法,但无论如何您都不会使用它。在characters()中,您可以轻松地进行修剪()…但由于CDATA标记的原因,您无法消除空白,这就是阻止进行修剪。有很多人试图使用堆栈从CDATA获取数据。你可以试试,我运气不太好。希望这将有助于你解决问题的方向。好的链接,这样你就可以找到导致这一问题的线索。好的链接,这样你就可以找到导致这一问题的线索。
    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. 
            }
        }