Usando Java para Analisar XML
Eu criei um script PHP que analisa um arquivo XML. Isso não é fácil de usar e eu queria implementá-lo em Java.
Dentro do primeiro elemento, existem várias contagens dewfs:member
elementos pelos quais repito:
foreach ($data->children("wfs", true)->member as $member) { }
Isso foi fácil de fazer com Java:
NodeList wfsMember = doc.getElementsByTagName("wfs:member");
for(int i = 0; i < wfsMember.getLength(); i++) { }
Abri o arquivo XML como este
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document doc = documentBuilder.parse(WeatherDatabaseUpdater.class.getResourceAsStream("wfs.xml"));
Então eu preciso obter um atributo de um elemento chamadoobserverdProperty
. No PHP, isso é simples:
$member->
children("omso", true)->PointTimeSeriesObservation->
children("om", true)->observedProperty->
attributes("xlink", true)->href
Mas em Java, como faço isso? Preciso usargetElementsByTagName
e passe por eles se eu quiser aprofundar a estrutura? `
No PHP, o script inteiro parece o seguinte.
foreach ($data->children("wfs", true)->member as $member) {
$dataType = $dataTypes[(string) $member->
children("omso", true)->PointTimeSeriesObservation->
children("om", true)->observedProperty->
attributes("xlink", true)->href];
foreach ($member->
children("omso", true)->PointTimeSeriesObservation->
children("om", true)->result->
children("wml2", true)->MeasurementTimeseries->
children("wml2", true)->point as $point) {
$time = $point->children("wml2", true)->MeasurementTVP->children("wml2", true)->time;
$value = $point->children("wml2", true)->MeasurementTVP->children("wml2", true)->value;
$data[$dataType][] = array($time, $value)
}
}
No segundoforeach
Percorro os elementos de observação e obtenho os dados de tempo e valor. Então eu salvo em uma matriz. Se eu precisar percorrer os elementos em Java da maneira que descrevi, isso é muito difícil de implementar. Eu não acho que seja esse o caso, então alguém poderia me aconselhar como implementar algo semelhante em Java?