java.net.MalformedURLException:无协议:XML

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23027382/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 20:08:50  来源:igfitidea点击:

java.net.MalformedURLException: no protocol: XML

javaxmlfileprotocolswriter

提问by user2741620

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

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

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>
...

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

现在,下面的代码是将字符串输出到 XML 文件中。

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

没有创建文件。有人能告诉我这是什么意思吗?以及如何解决这个问题?提前致谢

====================================================================================== 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

================================================== ==================================== 编辑(我最初认为错误在于 FileWritter,这就是我没有发布整个代码的原因):我编辑了我的帖子以显示我的整个代码。这段代码实际上是由一个 JSP 文件调用的。哪个通过 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

回答by user207421

saxParser.parse(xmlString, handler);

saxParser.parse(xmlString, handler);

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().

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

Note:

笔记:

  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, afterit was suggested that's what you must be doing. So you didn't even check.
  1. 你贴错了代码。堆栈跟踪告诉您异常是从哪里抛出的。显然你连看都没看。
  2. 当他们被问到问题时,你没有回答。
  3. 你问了无关紧要的问题。
  4. 有人建议这是你必须做的事情之后,你否认做了导致问题的事情。所以你甚至没有检查。

This is not a rational strategy for solving problems.

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