2017-07-23 20 views
-2

我会从一个OSM文件,它看起来像这样提取参考值:如何在java中的osm文件中从标记'way'的元素中提取ref值?

<?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> 

我想在结束是参考值存储在像一个文本文件:

4534884733 
4534884725 
4534884748 
82608659 
82608658 
639108039 
3451083060 
. 
. 

灿有人帮助我吗?有没有我可以用来执行此任务的Java代码?

+1

我删除了Perl和Python标记。请不要标记垃圾邮件......这里没有任何内容表明这与任何这些语言有关。此外,堆栈溢出不是代码写入服务。您需要发布您尝试过的代码,并在您遇到问题的某个地方发布具体问题。请阅读[如何提出问题](https://stackoverflow.com/help/how-to-ask)。 – stevieb

+0

crosspost:https://help.openstreetmap.org/questions/57230/how-to-extract-node-reference-values-within-a-way-from-osm-file – scai

回答

0

你应该使用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 attibute,你就能下完了他们阅读,NodeList不是迭代OU需要去throught像一个数组:

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

请不要鼓励“请写出代码为我“类型的问题。 – stevieb

相关问题