-1

如何在jdom中保留空白?

我收到以下错误:

org.jdom.JDOMException: Error on line 1: Content is not allowed in prolog

这是我的代码,请告诉这个代码的解决方案......

import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;

import java.io.*;
import java.lang.*;

public class JDOM_XML_TEST {
    Document m_doc = null;
    public Element elmEHResponse = null;
    String sEHResponseXml = "";
    String sOperationType = "Edit";
    static String s_return = "";
    StringBuffer strbuffer = null;
    String sParamsXml_1 = "<VWPortal>" + "<EHResponse Type='" + "  test    CustomObject" + "' ProgLangId='" + "1" + "'>" + "<Signature>public void Item1_ButtonClick_RESP1(Context ObjContextParam, string sPortlet, string sPortletInstanceId, CILPrtlDataset objCILPrtlDataset)</Signature></EHResponse><ResultType>Result</ResultType></VWPortal>";
    //String sParamsXml ="public String   Display_Test(){"     "String s ='Welcome';"    "return s;      }";

    public static void main(String[] args) {
        JDOM_XML_TEST xml_test = new JDOM_XML_TEST();
        s_return = xml_test.getXml();
        //System.out.println("Value is:::"+s_return);   
    }

    public String getXml() {
        try {
            if (!sOperationType.equalsIgnoreCase("Delete")) {
                SAXBuilder builder = new SAXBuilder(false);
                //Commended for CustomObject
                //doc = builder.build(new ByteArrayInputStream(sParamsXml.getBytes("UTF-8")));

                //For CustomObject Alignment
                strbuffer = new StringBuffer();
                strbuffer.append("public String   Display_Test(){ \n");
                strbuffer.append("\t\t\tString s ='Welcome'; \n");
                strbuffer.append("\t\t\t return s;  \n");
                strbuffer.append("}");

                sEHResponseXml = strbuffer.toString();
                System.out.println("Value of sEHResponseXml:::" + sEHResponseXml);

                builder.setIgnoringElementContentWhitespace(true);
                m_doc = builder.build(new ByteArrayInputStream(sEHResponseXml.getBytes("UTF-8")));
                elmEHResponse = m_doc.getRootElement();

                System.out.println("Value of elmEHResponse in before:::" + elmEHResponse);
                XMLOutputter Out = new XMLOutputter();
                sEHResponseXml = Out.outputString(elmEHResponse);

                System.out.println("Value of elmEHResponse in after:::" + sEHResponseXml);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return sEHResponseXml;
    }
}
4

3 回答 3

0

您的问题是在您的代码中您正在创建一个 StringBufferstrbuffer

            //For CustomObject Alignment
            strbuffer = new StringBuffer();
            strbuffer.append("public String   Display_Test(){ \n");
            strbuffer.append("\t\t\tString s ='Welcome'; \n");
            strbuffer.append("\t\t\t return s;  \n");
            strbuffer.append("}");

这个 StringBuffer 有内容

公共字符串 Display_Test(){
            字符串 s ='欢迎';
            返回 s;  
}

您正在将该 StringBuffer 分配给 StringsEHResponseXml并将其打印到控制台

            sEHResponseXml = strbuffer.toString();
            System.out.println("Value of sEHResponseXml:::" + sEHResponseXml);

问题是字符串sEHResponseXml 包含有效的 XML(它根本不是 XML)。然后,您尝试m_doc从该字符串构造一个 JDOM 文档

            builder.setIgnoringElementContentWhitespace(true);
            m_doc = builder.build(new ByteArrayInputStream(sEHResponseXml.getBytes("UTF-8")));

这就是你编程失败的地方,告诉你

org.jdom.JDOMException: Error on line 1: Content is not allowed in prolog

我重新运行了您的程序,但更改strbuffer为包含有效的 XML ( <doc> <p> h1 </p> </doc>),这是下面的程序

import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;

import java.io.*;
import java.lang.*;

public class JDOM_XML_TEST {
    Document m_doc = null;
    public Element elmEHResponse = null;
    String sEHResponseXml = "";
    String sOperationType = "Edit";
    static String s_return = "";
    StringBuffer strbuffer = null;
    String sParamsXml_1 = "<VWPortal>" + "<EHResponse Type='" + "  test    CustomObject" + "' ProgLangId='" + "1" + "'>" + "<Signature>public void Item1_ButtonClick_RESP1(Context ObjContextParam, string sPortlet, string sPortletInstanceId, CILPrtlDataset objCILPrtlDataset)</Signature></EHResponse><ResultType>Result</ResultType></VWPortal>";
    //String sParamsXml ="public String   Display_Test(){"     "String s ='Welcome';"    "return s;      }";

    public static void main(String[] args) {
        JDOM_XML_TEST xml_test = new JDOM_XML_TEST();
        s_return = xml_test.getXml();
        //System.out.println("Value is:::"+s_return);   
    }

    public String getXml() {
        try {
            if (!sOperationType.equalsIgnoreCase("Delete")) {
                SAXBuilder builder = new SAXBuilder(false);
               //Commended for CustomObject
               //doc = builder.build(new ByteArrayInputStream(sParamsXml.getBytes("UTF-8")));

                //For CustomObject Alignment
                strbuffer = new StringBuffer();
                strbuffer.append("<doc> <p> h1 </p> </doc>");


                sEHResponseXml = strbuffer.toString();
                System.out.println("Value of sEHResponseXml:::" + sEHResponseXml);

                builder.setIgnoringElementContentWhitespace(true);
                m_doc = builder.build(new ByteArrayInputStream(sEHResponseXml.getBytes("UTF-8")));
                elmEHResponse = m_doc.getRootElement();

                System.out.println("Value of elmEHResponse in before:::" + elmEHResponse);
                XMLOutputter Out = new XMLOutputter();
                sEHResponseXml = Out.outputString(elmEHResponse);

                System.out.println("Value of elmEHResponse in after:::" + sEHResponseXml);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return sEHResponseXml;
    }
} 

这输出

Value of sEHResponseXml:::<doc> <p> h1 </p> </doc>
Value of elmEHResponse in before:::[Element: <doc/>]
Value of elmEHResponse in after:::<doc> <p> h1 </p> </doc>
于 2012-07-30T13:25:56.917 回答
0

这是我的代码,请告诉这个代码的解决方案......

import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;

import java.io.*;
import java.lang.*;

public class JDOM_XML_TEST {
    Document m_doc = null;
    public Element elmEHResponse = null;
    String sEHResponseXml = "";
    String sOperationType = "Edit";
    static String s_return = "";
    StringBuffer strbuffer = null;
    String sParamsXml_1 = "<VWPortal>" + "<EHResponse Type='" + "  test    CustomObject" + "' ProgLangId='" + "1" + "'>" + "<Signature>public void Item1_ButtonClick_RESP1(Context ObjContextParam, string sPortlet, string sPortletInstanceId, CILPrtlDataset objCILPrtlDataset)</Signature></EHResponse><ResultType>Result</ResultType></VWPortal>";
    //String sParamsXml ="public String   Display_Test(){"     "String s ='Welcome';"    "return s;      }";

    public static void main(String[] args) {
        JDOM_XML_TEST xml_test = new JDOM_XML_TEST();
        s_return = xml_test.getXml();
        //System.out.println("Value is:::"+s_return);   
    }

    public String getXml() {
        try {
            if (!sOperationType.equalsIgnoreCase("Delete")) {
                SAXBuilder builder = new SAXBuilder(false);
                //Commended for CustomObject
                //doc = builder.build(new ByteArrayInputStream(sParamsXml.getBytes("UTF-8")));

                //For CustomObject Alignment
                strbuffer = new StringBuffer();
                strbuffer.append("public String   Display_Test(){ \n");
                strbuffer.append("\t\t\tString s ='Welcome'; \n");
                strbuffer.append("\t\t\t return s;  \n");
                strbuffer.append("}");

                sEHResponseXml = strbuffer.toString();
                System.out.println("Value of sEHResponseXml:::" + sEHResponseXml);

                builder.setIgnoringElementContentWhitespace(true);
                m_doc = builder.build(new ByteArrayInputStream(sEHResponseXml.getBytes("UTF-8")));
                elmEHResponse = m_doc.getRootElement();

                System.out.println("Value of elmEHResponse in before:::" + elmEHResponse);
                XMLOutputter Out = new XMLOutputter();
                sEHResponseXml = Out.outputString(elmEHResponse);

                System.out.println("Value of elmEHResponse in after:::" + sEHResponseXml);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return sEHResponseXml;
    }
}
于 2011-01-20T05:19:29.093 回答
0

此错误与在 XML 中保留空格无关,而是与 xml 内容开始之前的一些额外字节有关。使用 NotePad++(或 BBEdit 等)并检查您的 xml 文档开头是否有任何额外字符。还要在此处发布您的 XML。

于 2011-01-19T13:39:21.470 回答