Поток струн в Jdom - PullRequest
       9

Поток струн в Jdom

0 голосов
/ 19 января 2011

Как сохранить пробел в 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;
    }
}

Ответы [ 3 ]

0 голосов
/ 20 января 2011

Это мой код, пожалуйста, сообщите решение для этого кода ...

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;
    }
}
0 голосов
/ 30 июля 2012

Ваша проблема в том, что в вашем коде вы создаете StringBuffer strbuffer

            //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 имеет содержимое

public String   Display_Test(){ 
            String s ='Welcome'; 
            return s;  
}

Вы назначаете StringBuffer для String sEHResponseXml и распечатываете его на консоль

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

Проблема в том, что строка sEHResponseXml не содержит действительный XML (это вообще не XML). Затем вы пытаетесь создать документ JDOM m_doc из этой строки

            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>
0 голосов
/ 19 января 2011

Эта ошибка не связана с сохранением пробелов в вашем XML, но с некоторыми дополнительными байтами до начала вашего содержимого XML. Используйте NotePad ++ (или BBEdit и т. Д.) И проверьте, есть ли дополнительные символы в начале вашего XML-документа. Также опубликуйте свой XML здесь.

...