我如何修复 Document: GML-Response 上的空错误
How do i fix Document: null error on GML-Response
我必须在 Java 中使用 jdom 将 GML 服务器响应转换为 GPX 文件
到目前为止,我发送到服务器的 Get-Feature-Request 是正确的,并给我一个 GML 文件作为响应,但是当我想打印文件时,它说 [#document: null]
控制台输出:
[#document: null]
try {
//zu Funktionstestzwecken - löschen wenn nicht mehr benötigt
String typename = gui.ConverterDialog.tfconverter.getText();
String urlString = gui.UrlDialog.txturlinput.getText() + "?service=WFS&version=1.0.0&REQUEST=GetFeature&typename=" + typename;
//entfernen wenn nicht mehr benötigt
System.out.println("url "+ urlString);
URL url = new URL(urlString);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(url.openStream());
//doc.getDocumentElement().normalize();
//entfernen wenn nicht mehr benötigt
//doc null ???
System.out.println(doc);
} catch(Exception e) {
String errorMessage = "An error occured:" + e;
System.err.println(errorMessage);
e.printStackTrace();
}
当行
System.out.println(doc);
运行,它调用文档 doc
的 toString()
方法并打印出来。文档的 toString()
方法不会将 XML 文档序列化为字符串;相反,它只打印节点名称及其值。文档节点的名称是 #document
,文档节点没有值,因此打印 null
。
我在测试 XML 文档上尝试 运行 你的 XML 解析代码,它也打印出 [#document: null]
。
看起来您的 XML 解析失败了,给您留下了一个空文档,但我认为情况并非如此。您的代码很可能工作正常。
如果要将 XML 文档序列化为字符串,请参阅 this question。
此代码解决了问题:
//...
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(url.openStream());
doc.getDocumentElement().normalize();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
String xmlString = result.getWriter().toString();
System.out.println(xmlString);
我必须在 Java 中使用 jdom 将 GML 服务器响应转换为 GPX 文件 到目前为止,我发送到服务器的 Get-Feature-Request 是正确的,并给我一个 GML 文件作为响应,但是当我想打印文件时,它说 [#document: null]
控制台输出:
[#document: null]
try {
//zu Funktionstestzwecken - löschen wenn nicht mehr benötigt
String typename = gui.ConverterDialog.tfconverter.getText();
String urlString = gui.UrlDialog.txturlinput.getText() + "?service=WFS&version=1.0.0&REQUEST=GetFeature&typename=" + typename;
//entfernen wenn nicht mehr benötigt
System.out.println("url "+ urlString);
URL url = new URL(urlString);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(url.openStream());
//doc.getDocumentElement().normalize();
//entfernen wenn nicht mehr benötigt
//doc null ???
System.out.println(doc);
} catch(Exception e) {
String errorMessage = "An error occured:" + e;
System.err.println(errorMessage);
e.printStackTrace();
}
当行
System.out.println(doc);
运行,它调用文档 doc
的 toString()
方法并打印出来。文档的 toString()
方法不会将 XML 文档序列化为字符串;相反,它只打印节点名称及其值。文档节点的名称是 #document
,文档节点没有值,因此打印 null
。
我在测试 XML 文档上尝试 运行 你的 XML 解析代码,它也打印出 [#document: null]
。
看起来您的 XML 解析失败了,给您留下了一个空文档,但我认为情况并非如此。您的代码很可能工作正常。
如果要将 XML 文档序列化为字符串,请参阅 this question。
此代码解决了问题:
//...
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(url.openStream());
doc.getDocumentElement().normalize();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result = new StreamResult(new StringWriter());
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
String xmlString = result.getWriter().toString();
System.out.println(xmlString);