gpt4 book ai didi

java - 为什么此代码会抛出 MalformedURLException?

转载 作者:行者123 更新时间:2023-12-02 02:58:58 25 4
gpt4 key购买 nike

我有以下代码片段:

public class DOMTest {

public static void main( String[] args )
throws ParserConfigurationException, SAXException, IOException {
String xml = "<D:propfind xmlns:D=\"DAV:\""
+ " xmlns:C=\"urn:ietf:params:xml:ns:carddav\">\n"
+ " <D:prop>\n" + " <D:displayname />\n"
+ " <C:getctag />\n" + " </D:prop>\n" + "</D:propfind>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware( true );
DocumentBuilder builder = null;
Document doc = null;
builder = factory.newDocumentBuilder();
System.out.println( "namespaceAware=" + builder.isNamespaceAware()
+ ", validating=" + builder.isValidating() );
doc = builder.parse( xml );
}
}

运行它会产生以下输出:

namespaceAware=true, validating=false
Exception in thread "main" java.net.MalformedURLException: no protocol:
<D:propfind xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav
<D:prop>
<D:displayname />
<C:getctag />
</D:prop>
</D:propfind>
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)
at com.lemcke.c.dav.card.DOMTest.main(DOMTest.java:31)

xml 是 CardDAV 请求的标准示例。这是使用命名空间时的一些配置问题吗?

最佳答案

parse方法可以将InputStream作为参数或字符串,如果你给它一个字符串,它会尝试打开字符串的位置,在你的情况下,字符串就是内容。

解决此问题的方法如下:

    doc = builder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("utf-8"))));

您可以在此处找到更多信息: http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html

关于java - 为什么此代码会抛出 MalformedURLException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42651414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com