线程“main”中的异常java.net.MalformedURLException:未知协议:c

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26539373/
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-11 02:44:13  来源:igfitidea点击:

Exception in thread "main" java.net.MalformedURLException: unknown protocol: c

javaxmlparsingruntime-errorsax

提问by James

I am trying to use a SAX Parser to parse a XML file. Although I keep getting the error below in my code:

我正在尝试使用 SAX 解析器来解析 XML 文件。尽管我的代码中不断出现以下错误:

    Exception in thread "main" java.net.MalformedURLException: unknown protocol: c
    at java.net.URL.<init>(URL.java:592)
    at java.net.URL.<init>(URL.java:482)
   at java.net.URL.<init>(URL.java:431)
   at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:605)
   at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:799)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
   at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1137)
   at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:580)
   at main.main(main.java:28)
   Java Result: 1

Here Is My handler Class:

这是我的处理程序类:

    public class MySaxParser extends DefaultHandler {

    Index i = new Index(12);
    String bookxmlfilename;
    String tmpValue;
    BookCitation c;
    JournalArticle j;
    Unpublished u;
    ConfProceedings p;

  public MySaxParser() {
      }

    @Override
    public void startElement(String s, String s1, String elementName, Attributes attr) throws SAXException {
        if (elementName.equalsIgnoreCase("JournalArticle")) {
            if (elementName.equalsIgnoreCase("Pages")) {
                j.setstartPage(Integer.parseInt(attr.getValue("StartPage")));
                j.setendPage(Integer.parseInt(attr.getValue("EndPage")));
            }
        }
        if (elementName.equalsIgnoreCase("ConferenceProceedings")) {
            if (elementName.equalsIgnoreCase("Pages")) {
                p.setstartPage(Integer.parseInt(attr.getValue("StartPage")));
                p.setendPage(Integer.parseInt(attr.getValue("EndPage")));
            }
        }
    }

    @Override
    public void endElement(String s, String s1, String element) throws SAXException {
        if (element.equalsIgnoreCase("book")) {
            i.addCitation(c);
            if (element.equalsIgnoreCase("name")) {
                c.setName(tmpValue);
            }
            if (element.equalsIgnoreCase("publisher")) {
                c.setpublisher(tmpValue);
            }
            if (element.equalsIgnoreCase("publicationDate")) {
                c.setdateOfPublication(tmpValue);
            }
            if (element.equalsIgnoreCase("authors")) {
                if (element.equalsIgnoreCase("author")) {
                    c.addAuthor(tmpValue);
                }
            }
            if (element.equalsIgnoreCase("keywords")) {
                if (element.equalsIgnoreCase("keyword")) {
                    c.addKeyword(tmpValue);
                }
            }
        }
        if (element.equalsIgnoreCase("JournalArticle")) {
            i.addCitation(j);
            if (element.equalsIgnoreCase("name")) {
                j.setName(tmpValue);
            }
           if (element.equalsIgnoreCase("TitleOfJournal")) {
                j.settitleOfJournal(tmpValue);
            }
            if (element.equalsIgnoreCase("TitleOfJournal")) {
                j.settitleOfJournal(tmpValue);
            }
            if (element.equalsIgnoreCase("PublicationDate")) {
                j.setpublicationDate(tmpValue);
            }
            if (element.equalsIgnoreCase("volNumber")) {
                j.setvolNumber(Integer.parseInt(tmpValue));
            }
            if (element.equalsIgnoreCase("IssueNumber")) {
                j.setissueNumber(Integer.parseInt(tmpValue));
            }
            if (element.equalsIgnoreCase("authors")) {
                if (element.equalsIgnoreCase("author")) {
                    j.addAuthor(tmpValue);
                }
                if (element.equalsIgnoreCase("keywords")) {
                    if (element.equalsIgnoreCase("keyword")) {
                        j.addKeyword(tmpValue);
                    }
                }
           }
        }
        if (element.equalsIgnoreCase("Unpublished")) {
            i.addCitation(u);
            if (element.equalsIgnoreCase("name")) {
                u.setName(tmpValue);
            }
            if (element.equalsIgnoreCase("authors")) {
            if (element.equalsIgnoreCase("author")) {
                    u.addAuthor(tmpValue);
                }
                if (element.equalsIgnoreCase("keywords")) {
                    if (element.equalsIgnoreCase("keyword")) {
                        u.addKeyword(tmpValue);
                    }
                }
            }
         }

        if (element.equalsIgnoreCase("ConferenceProceedings")) {
            i.addCitation(p);
            if (element.equalsIgnoreCase("name")) {
                p.setName(tmpValue);
            }
            if (element.equalsIgnoreCase("publisher")) {
                p.setpublisher(tmpValue);
            }
            if (element.equalsIgnoreCase("ConferenceLocation")) {
                p.setlocationOfConference(tmpValue);
            }
            if (element.equalsIgnoreCase("TitleOfConferenceproceeding")) {
                p.settitleOfConferenceProc(tmpValue);
            }
            if (element.equalsIgnoreCase("ConferenceYea")) {
                p.setconfYear(Integer.parseInt(tmpValue));
            }
            if (element.equalsIgnoreCase("Editor")) {
                p.seteditor(tmpValue);
            }
            if (element.equalsIgnoreCase("authors")) {
                if (element.equalsIgnoreCase("author")) {
                    p.addAuthor(tmpValue);
                }
                if (element.equalsIgnoreCase("keywords")) {
                    if (element.equalsIgnoreCase("keyword")) {
                        p.addKeyword(tmpValue);
                    }
                }
            }
        }

        if (element.equalsIgnoreCase("FormattingStyle")) {
            i.setFormatType("IEEE");

            }
            if (element.equalsIgnoreCase("FormattingStyle")) {

            try {
                i.formatIEEE(tmpValue);
            } catch (IOException ex) {
                Logger.getLogger(MySaxParser.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
   }

    @Override
    public void characters(char[] ac, int i, int j) throws SAXException {
        tmpValue = new String(ac, i, j);
    }

}

Here is my main class:

这是我的主要课程:

    public class main {

     public static void main(String[] args) throws IOException,     ParserConfigurationException, SAXException {
        // Create scanner
        Scanner OswegoNote = new Scanner(System.in);
        //Create a parser factory
        SAXParserFactory factory = SAXParserFactory.newInstance();
        //Make the parser
        SAXParser saxParser = factory.newSAXParser();
        XMLReader parser = saxParser.getXMLReader();
        //Create a handler
        MySaxParser handler = new MySaxParser();
        //Tell the parser to use this handler
        parser.setContentHandler(handler);
        //read and parse the document
        parser.parse("C:\Users\mhromalik\Documents\Suny Oswego\fall2013\csc241fall2012\Assignment\MyCitation.html");
        }
}

And here is part of my XML file:

这是我的 XML 文件的一部分:

        <Citation>
        <ConferenceProceedings>
            <Name>An efficient implementation of Smith Waterman algorithm on GPU using CUDA, for massively parallel scanning of sequence databases</Name>
            <Publisher>Parallel and Distributed Processing</Publisher>
            <ConferenceLocation>Austin,TX</ConferenceLocation>
            <TitleOfConferenceproceeding> IEEE International Conference on Parallel and Distributed Processing</TitleOfConferenceproceeding>
            <ConferenceYear>2009</ConferenceYear>
            <Editor>S. M. Mann</Editor>
            <Pages StartPage="85" EndPage="102"/>
            <Authors>
                <author>L. L. Ligowski</author>
                <author>W. A. Rudnicki</author>
            </Authors>
            <Keywords>
                <Keyword>Sparse Data</Keyword>
                <Keyword>DNA</Keyword>
                <Keyword>GPU</Keyword>
                <Keyword>Data Mining</Keyword>
            </Keywords>
        </ConferenceProceedings>
    </Citation>
       <FormattingStyle>IEEE</FormattingStyle>
    <FilePath>C:\Users\mhromalik\Documents\Suny Oswego\fall2013\csc241fall2012\Assignment\MyCitation.html</FilePath>
</Index>

I can not figure out why this error is happening. Any help would be greatly appreciated!

我无法弄清楚为什么会发生此错误。任何帮助将不胜感激!

采纳答案by Juned Ahsan

You are missing the protocol when you set the path for your html file. As you are trying to read a local html file, you can use fileprotocol:

为 html 文件设置路径时,您缺少协议。当您尝试读取本地 html 文件时,您可以使用file协议:

file:///{yourfilepath}

回答by Michael Kay

parser.parse() expects a URI, not a filename. You can get from a filename to a URI in Java using

parser.parse() 需要 URI,而不是文件名。您可以使用从文件名到 Java 中的 URI

new File(filename).toURI()