次のコード スニペットがあります。
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 を参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加