Разбор значения из тега XML в Java - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь проанализировать значение температуры в этом XML-ответе.

<current>
<city id="2643743" name="London">
<coord lon="-0.13" lat="51.51"/>
<country>GB</country>
<sun rise="2017-01-30T07:40:36" set="2017-01-30T16:47:56"/>
</city>
<temperature value="280.15" min="278.15" max="281.15" unit="kelvin"/>
<humidity value="81" unit="%"/>
<pressure value="1012" unit="hPa"/>
<wind>
<speed value="4.6" name="Gentle Breeze"/>
<gusts/>
<direction value="90" code="E" name="East"/>
</wind>
<clouds value="90" name="overcast clouds"/>
<visibility value="10000"/>
<precipitation mode="no"/>
<weather number="701" value="mist" icon="50d"/>
<lastupdate value="2017-01-30T15:50:00"/>
</current>

Мне удалось проанализировать страну, например, потому что в теге есть только одно значение, но то, что я хочуэто только значение температуры, которое в этом примере составляет 280,15.

Мой код для разбора:

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource (new StringReader(response.toString())));

    NodeList errNodes=doc.getElementsByTagName("current");
    if(errNodes.getLength()>0){
    Element err=(Element) errNodes.item(0);
    System.out.println(err.getElementsByTagName("country").item(0).getTextContent());
    }else{
    }

Когда я изменяю getElementByTagName на температуру, он не распознает его, конечно, потому что внутри тега температуры есть 4 значения, и он не 'Не знаю, какой из них выбрать, и вся структура тега температуры отличается от структуры тега страны.

Существует ли какой-либо простой способ анализа только значения температуры?

Редактировать: Я изменил функцию синтаксического анализа, и теперь она выглядит так:

    NodeList errNodes=doc.getElementsByTagName("temprature");
    if(errNodes.getLength()>0){
   // Element err=(Element) errNodes.item(0);
    System.out.println(errNodes.item(2).getAttributes().getNamedItem("value").getNodeValue());

Но все еще не могу получить никаких значений!

1 Ответ

0 голосов
/ 17 мая 2018

Этот ответ основан на этом вопросе
Таким образом, вы можете получить value температуры. Я добавил дополнительные шаги, чтобы вы могли проверить промежуточные значения с помощью отладчика.
От того же attrs вы можете получить единицу измерения температуры.

Обратите внимание, что имя метода ошибочно, потому что оно ничего не возвращает. Единственный смысл - показать код доступа к значению температуры.

Импорт:

import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

Метод:

public void getTemperature() throws SAXException, IOException, ParserConfigurationException {

        String xml = "<current>\r\n" + 
        "<city id=\"2643743\" name=\"London\">\r\n" + 
        "<coord lon=\"-0.13\" lat=\"51.51\"/>\r\n" + 
        "<country>GB</country>\r\n" + 
        "<sun rise=\"2017-01-30T07:40:36\" set=\"2017-01-30T16:47:56\"/>\r\n" + 
        "</city>\r\n" + 
        "<temperature value=\"280.15\" min=\"278.15\" max=\"281.15\" unit=\"kelvin\"/>\r\n" + 
        "<humidity value=\"81\" unit=\"%\"/>\r\n" + 
        "<pressure value=\"1012\" unit=\"hPa\"/>\r\n" + 
        "<wind>\r\n" + 
        "<speed value=\"4.6\" name=\"Gentle Breeze\"/>\r\n" + 
        "<gusts/>\r\n" + 
        "<direction value=\"90\" code=\"E\" name=\"East\"/>\r\n" + 
        "</wind>\r\n" + 
        "<clouds value=\"90\" name=\"overcast clouds\"/>\r\n" + 
        "<visibility value=\"10000\"/>\r\n" + 
        "<precipitation mode=\"no\"/>\r\n" + 
        "<weather number=\"701\" value=\"mist\" icon=\"50d\"/>\r\n" + 
        "<lastupdate value=\"2017-01-30T15:50:00\"/>\r\n" + 
        "</current>";


        Document doc = DocumentBuilderFactory
                .newInstance()
                .newDocumentBuilder()
                .parse(new InputSource (new StringReader(xml)));

        NodeList errNodes=doc.getElementsByTagName("current");
        if(errNodes.getLength()>0){
            Element err=(Element) errNodes.item(0);
            NodeList temps = err.getElementsByTagName("temperature");
            Node temp = temps.item(0);
            NamedNodeMap attrs = temp.getAttributes();
            Node val = attrs.getNamedItem("value");
            String strValue = val.getNodeValue();
            System.out.println(strValue);
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...