【问题标题】:Why do I keep getting "java.net.MalformedURLException: no protocol" [duplicate]为什么我不断收到“java.net.MalformedURLException:无协议”[重复]
【发布时间】:2017-05-01 06:46:12
【问题描述】:

我已经尝试了所有不同类型的组合,但我就是没有从我这里得到它想要的:

java.net.MalformedURLException: no protocol: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ds><ds>...
    at java.net.URL.<init>(URL.java:593)
    at java.net.URL.<init>(URL.java:490)
    at java.net.URL.<init>(URL.java:439)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:620)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:148)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:805)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)

我查看了其他问题,但我不明白我的 XML 有什么问题。

这是完整的 XML(删除了一些纯文本):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ds>
    <ds>
        <cue>ABGB : §§ 786 , 810 , 812 </cue>Die Kosten ... <cue>Anmerkung : </cue>
        ... <cue>Bestätigung von </cue>7 
        <Relation bewertung="1">Ob 56/10a </Relation>= Zak 
        <Relation bewertung="1">2010/773 , 440 </Relation>. 
    </ds>
</ds>

生产代码:

DocumentBuilderFactory icFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder icBuilder;

Document parse = null;

try {
    icBuilder = icFactory.newDocumentBuilder();             
    parse = icBuilder.parse(xmlString);
} catch (ParserConfigurationException e) {
    e.printStackTrace();
} catch (SAXException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

【问题讨论】:

  • 能否也分享一下代码?
  • 因为你的 xml 不是 URL
  • 您不能从 XML 字符串创建 URL 对象 - 必须是实际的 URL
  • 我投票决定将此问题作为离题结束,因为答案在 URL javadoc 中:docs.oracle.com/javase/8/docs/api/java/net/URL.html
  • 这看起来很清楚,真的。你到底想做什么?!

标签: java xml


【解决方案1】:

parse(String) 方法采用指向 XML 文档的 uri,而不是其内容。

为了解析内容,您必须构建自己的InputSource。例如:

parse = icBuilder.parse(new InputSource(new StringReader(xmlString)));

【讨论】:

    【解决方案2】:

    您将String 传递给icBuilder.parse(xmlString),因此您实际上是在调用DocumentBuilder.parse(String uri)

    该方法需要一个 URI,并在您向其传递一些 XML 数据时尝试对其进行解析。

    【讨论】:

    • 你为什么要尝试称它为parseUri(),对吗?
    • 这是一个解释为什么它不起作用,但它并不建议像 Mureinik 这样的解决方案
    猜你喜欢
    • 2012-09-03
    • 2018-11-08
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多