gpt4 book ai didi

java - OSM xml 损坏?

转载 作者:行者123 更新时间:2023-12-02 08:51:32 28 4
gpt4 key购买 nike

我已经下载了 OSM 世界地图。解析时出现异常:

osm
bound
changeset
(...)
changeset
Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 3682; columnNumber: 140; XML-Dokumentstrukturen müssen innerhalb derselben Entity beginnen und enden.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1472)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.endEntity(XMLDocumentFragmentScannerImpl.java:899)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.endEntity(XMLDocumentScannerImpl.java:559)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.endEntity(XMLEntityManager.java:1398)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1916)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanLiteral(XMLEntityScanner.java:1187)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:987)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1548)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1315)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2784)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:327)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:195)
at xxxx.web.OSMReader.main(OSMReader.java:20)

我的代码是:

public class OSMReader {
public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
BZip2CompressorInputStream bic = new BZip2CompressorInputStream(new FileInputStream(new File("X:\\Medien\\Karten\\planet-200309.osm.bz2")));
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.newSAXParser().parse(bic, new DefaultHandler() {
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println(qName);
}
});
bic.close();
}
}

我非常确定 OSM 能够生成有效的 XML 文件。

XML 文件本身太大,无法确认问题。

知道如何成功解析 XML 吗?

编辑

我尝试读取 xml 中的行:

public class OSMReader {
public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
BZip2CompressorInputStream bic = new BZip2CompressorInputStream(new FileInputStream(new File("X:\\Medien\\Karten\\planet-200309.osm.bz2")));
BufferedReader br = new BufferedReader(new InputStreamReader(bic));
int i = 0;
while (i++ < 3685) {
String line = br.readLine();
if (i > 3680) {
System.out.println(line);
}
}
bic.close();
}
}

什么给了我这个输出:

 <changeset id="3678" created_at="2008-06-01T01:18:46Z" closed_at="2008-06-01T02:47:15Z" open="false" user="mawis" uid="37850" min_lat="49.1950155" min_lon="9.2284944" max_lat="49.2049970" max_lon="9.2458586" num_changes="154" comments_count="0"/>
<changeset id="3679" created_at="2007-04-01T11:30:20Z" closed_at="2007-04-01T12:30:24Z" open="false" user="B10xxx" uid="6454" min_lat="52.
null
null
null

我检查了 MD5 哈希值,它们匹配:

X:\Medien\Karten>fciv -md5 planet-200309.osm.bz2
//
// File Checksum Integrity Verifier version 2.05.
//
4da6b47311c1b05f603542a55df2d69b planet-200309.osm.bz2

X:\Medien\Karten>

内容为https://planet.openstreetmap.org/planet/2020/planet-200309.osm.bz2.md5

最佳答案

我必须向 BZip2CompressorInputStream 的构造函数添加 , true

关于java - OSM xml 损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60735241/

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