本文介绍了java.net.MalformedURLException:无协议:XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将XML字符串输出到.xml文件中,以进行调试.我的字符串看起来像这样:

I am trying to output an XML String into a .xml file for debugging purpose. My String looks like this:

System.out.println("xmlString = \n" + xmlString);
===========================================================
INFO: xmlString =
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">2</int>
  <lst name="params">
    <str name="indent">true</str>
    <str name="q">source_t:ST</str>
    <str name="wt">xml</str>
  </lst>
</lst>
...

现在,以下代码将String输出到XML文件中.

Now, the following code is to output the String into XML file.

try {
                System.out.println("Writing xmlString to xml file");

                File file = new File("xmlString.xml");

                // if file doesnt exists, then create it
                if (!file.exists()) {
                        file.createNewFile();
                }

                FileWriter fw = new FileWriter(file.getAbsoluteFile());
                BufferedWriter bw = new BufferedWriter(fw);
                bw.write(xmlString);
                bw.close();

                System.out.println("Done writing file");

        } catch (IOException e) {
                e.printStackTrace();
        }

但这是我从输出日志中得到的错误:

But this is the error I got from output log:

INFO: Writing xmlString to xml file
INFO: Done writing file
SEVERE: java.net.MalformedURLException: no protocol: <?xml version="1.0" encoding="UTF-8"?>

未创建文件.有人可以告诉我这是什么意思吗?以及如何解决呢?预先感谢

No file is created.Can someone tell me what does this mean? And how to solve this?Thanks in advance

======================================================================================编辑(我最初虽然是由于错误发生在FileWritter上,所以才没有发布整个代码):我已经编辑了帖子以显示我的整个代码.该代码实际上是由JSP文件调用的.哪个通过xmlString

======================================================================================Edit (I initially though that the error lies at the FileWritter, which is why I didn't post the whole code): I have edited my post to display my whole code. This code is actually called by a JSP file. Which passes the xmlString

public class SAXParserClass {

    //Declare as public since it needs to be redefined for appending into ArrayList
    public static String row[] = new String[5];         //id, full_message_t, source_t, news_t, link_t

    public ArrayList<String[]> XMLReader(String xmlString)
    {
        //Output: GlassFish Server. Test if String is passed in correctly
        System.out.println("xmlString = \n" + xmlString);
        try {
                System.out.println("Writing xmlString to xml file");

                File file = new File("xmlString.xml");

                // if file doesnt exists, then create it
                if (!file.exists()) {
                        file.createNewFile();
                }

                FileWriter fw = new FileWriter(file.getAbsoluteFile());
                BufferedWriter bw = new BufferedWriter(fw);
                bw.write(xmlString);
                bw.close();

                System.out.println("Done writing file");

        } catch (IOException e) {
                e.printStackTrace();
        }

          //Declaration
          final ArrayList<String[]> tableResult = new ArrayList<String[]>();    //Store ArrayList of row[]

          try {

              SAXParserFactory factory = SAXParserFactory.newInstance();
              SAXParser saxParser = factory.newSAXParser();

              DefaultHandler handler = new DefaultHandler()
              {
                  //When these are TRUE, extract the content
                    boolean b_id = false;
                    boolean b_full_message_t = false;
                    boolean b_source_t = false;
                    boolean b_news_t = false;
                    boolean b_link_t = false;

                    //############################################################################################
                    //Look for <start> tags
                    public void startElement(String uri, String localName,String qName,
                            Attributes attributes) throws SAXException {

                            System.out.println("Start Element :" + qName);

                            //Only interested in <str>
                            if (qName.equalsIgnoreCase("str")) {
                                String name = attributes.getValue("name");

                                    //Check for name="id"
                                if(name.equalsIgnoreCase("id")){
                                    b_id = true;
                                }
                                    //Check for name="full_message_t"
                                else if(name.equalsIgnoreCase("full_message_t")){
                                    b_full_message_t = true;
                                }
                                else if(name.equalsIgnoreCase("source_t")){
                                    b_source_t = true;
                                }
                                else if(name.equalsIgnoreCase("news_t")){
                                    b_news_t= true;
                                }
                                else if(name.equalsIgnoreCase("link_t")){
                                    b_link_t = true;
                                }
                            }//end if

                    }//end startElement

                    //############################################################################################
                    //Look for <end> tags
                    public void endElement(String uri, String localName,
                            String qName) throws SAXException {

                            System.out.println("End Element :" + qName);

                            //When reach </doc>, row Array is complete. Add into ArrayList
                            if (qName.equalsIgnoreCase("doc")) {
                                    System.out.println("Push row into Arraylist : " + row[0]);
                                    tableResult.add(row);
                                    row = new String[5];    //reinitialize String[]
                            }
                    }//end endElement

                    //############################################################################################
                    //Get the content
                    public void characters(char ch[], int start, int length) throws SAXException {

                            if (b_id) {
                                    //System.out.println("id : " + new String(ch, start, length));
                                    row[0] = new String(ch, start, length);
                                    System.out.println("The id is " + row[0]);
                                    b_id = false;
                            }
                            else if (b_full_message_t) {
                                    //System.out.println("fullmsg : " + new String(ch, start, length));
                                    row[1] = new String(ch, start, length);
                                    System.out.println("The fullmsg is " + row[1]);
                                    b_full_message_t = false;
                            }
                            else if (b_source_t) {
                                    //System.out.println("fullmsg : " + new String(ch, start, length));
                                    row[2] = new String(ch, start, length);
                                    System.out.println("The source is " + row[2]);
                                    b_source_t = false;
                            }
                            else if (b_news_t) {
                                    //System.out.println("fullmsg : " + new String(ch, start, length));
                                    row[3] = new String(ch, start, length);
                                    System.out.println("The news is " + row[3]);
                                    b_news_t = false;
                            }
                            else if (b_link_t) {
                                    //System.out.println("fullmsg : " + new String(ch, start, length));
                                    row[4] = new String(ch, start, length);
                                    System.out.println("The link is " + row[4]);
                                    b_link_t = false;
                            }

                    }//end characters

           };//end DefaultHandler

              //############################################################################################
              //Read the String
              //saxParser.parse("solrTest.xml", handler);
              //File file = new File("solrTest.xml");
              //InputStream inputStream= new FileInputStream(file);
//            Reader reader = new InputStreamReader(xmlString,"UTF-8");
//
//            InputSource is = new InputSource(reader);
//            is.setEncoding("UTF-8");

              saxParser.parse(xmlString, handler);

           } catch (Exception e) {
             e.printStackTrace();
           }

          //Test output Arraylist
          System.out.println("Test Result!!!");

          for(String[] columns : tableResult){
              for(int i=0; i<columns.length; i++){
                  System.out.println("Number = " + columns[i]);
              }
          }

          //Return the ArrayList of String[]
          return tableResult;
      }//end XMLReader

}//end class

推荐答案

问题在这里.您正在传递XML字符串,就好像它是一个URL.不是.您需要阅读SAXParser.parse()的Javadoc.

The problem is here. You are passing the XML string as though it was a URL. It isn't. You need to read the Javadoc for SAXParser.parse().

注意:

  1. 您输入了错误的代码.堆栈跟踪告诉您从何处引发了异常.您显然根本没有看过它.
  2. 当您被问到时,您没有回答问题.
  3. 您问了不相关的问题.
  4. 您拒绝做引起问题的事情,之后建议您这样做.所以你甚至都没有检查.
  1. You posted the wrong code. The stack trace told you where the exception was thrown from. You evidently didn't even look at it.
  2. You failed to answer questions when they were asked.
  3. You asked irrelevant questions.
  4. You denied doing the very thing that caused the problem, after it was suggested that's what you must be doing. So you didn't even check.

这不是解决问题的合理策略.

This is not a rational strategy for solving problems.

这篇关于java.net.MalformedURLException:无协议:XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-18 08:11
查看更多