如何从 java 中 osm 文件中的标签"way"元素中提取引用值?



我将从OSM文件中提取引用值,如下所示:

<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="osmfilter 1.4.2">
<way id="10053349">
<nd ref="4534884733"/>
<nd ref="4534884725"/>
<nd ref="4534884748"/>
<nd ref="82608659"/>
<nd ref="82608658"/>
<nd ref="639108039"/>
<nd ref="3451083060"/>
<nd ref="345553449"/>
<nd ref="345553447"/>
<nd ref="345553431"/>
<nd ref="3451083057"/>
<nd ref="345553432"/>
<nd ref="345553433"/>
<nd ref="345553434"/>
<nd ref="345553435"/>
<nd ref="3451083068"/>
<nd ref="345553436"/>
<nd ref="29564147"/>
<nd ref="345553437"/>
<nd ref="345553438"/>
<nd ref="3451083079"/>
<nd ref="345553439"/>
<nd ref="3451083082"/>
<nd ref="345553440"/>
<nd ref="1326631485"/>
<nd ref="82608663"/>
<nd ref="82608662"/>
<nd ref="4534884733"/>
<tag k="addr:housenumber" v="21"/>
<tag k="addr:street" v="Arcisstraße"/>
<tag k="amenity" v="university"/>
<tag k="building" v="yes"/>
<tag k="name" v="1"/>
<tag k="wheelchair" v="yes"/>
</way>
</osm>

最后我想要的是将 ref 值存储在文本文件中,例如:

4534884733
4534884725
4534884748
82608659
82608658
639108039
3451083060
.
.

谁能帮我?是否有任何 Java 代码可用于执行此任务?

你应该使用Xpath

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("C://...//myFile.xml");
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("//nd/@ref");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

模式"//nd/@ref"将采用所有元素nd并保持其ref属性,您将可以在旁边阅读它们,NodeList是不可迭代的 ou 需要像数组一样遍历:

for (int i = 0; i < nl.getLength(); i++) 
//write : nl.item(i).getTextContent(), somewhere
}

最新更新