Как получить root node атрибуты java

У меня есть xml файл, как показано ниже. Я хочу получить атрибуты широты и долготы узлов аптек. Я могу получить атрибуты chilnodes, но не могу получить атрибуты root node. Я новичок в java и xml. Я не мог найти решение, как это сделать.

<pharmacies Acc="4" latitude="36.8673380" longitude="30.6346640" address="Ayujkila">
        <pharmacy name="sadde" owner="" address="dedes" distance="327.000555668" phone="342343" lat="36.8644" long="30.6345" accuracy="8"/>
        <pharmacy name="Sun " owner="" address="degerse" distance="364.450016586" phone="45623" lat="36.8641" long="30.6353" accuracy="8"/>
        <pharmacy name="lara" owner="" address="freacde" distance="927.262190129" phone="564667" lat="36.8731" long="30.6422" accuracy="8"
    <end/>
    </pharmacies>

Это моя часть кода. Я получаю xml файл с URL-адреса.

                    DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
                 DocumentBuilder db = dbf.newDocumentBuilder();
                 Document doc = db.parse(new InputSource(url.openStream()));
                 doc.getDocumentElement().normalize();
                    NodeList nodeList =doc.getElementsByTagName("pharmacy");
                 for (int i = 0; i < nodeList.getLength(); i++){
                      Node node =nodeList.item(i);
                      Element fstElmnt = (Element) node;
                      NodeList pharmacyList = fstElmnt.getElementsByTagName("pharmacy");
                      Element pharmacyElement = (Element) pharmacyList.item(0);
              Element pharmacyElement = (Element) pharmacyList.item(0);

              HashMap<String,String>map=new HashMap<String,String>();                   
              map.put("name", pharmacyElement.getAttribute("name"));
              map.put("distance", pharmacyElement.getAttribute("phone"));
              list.add(map);

              latt.add(pharmacyElement.getAttribute("lat"));

                    ....

Ответ 1

Сам элемент <pharmacies> можно получить, используя

Element pharmacies = doc.getDocumentElement();

Вы можете получить от этого атрибуты.

Ответ 2

doc.getDocumentElement() вернет корневой элемент, и вы можете вызвать getAttribute( attrName ) на нем, как и на любой другой элемент.

Ответ 3

попробуйте следующее:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(new ByteArrayInputStream(xml.getBytes("UTF-8")));
    doc.getDocumentElement().normalize();
    System.out.println(doc.getChildNodes().getLength());
    Node item = doc.getChildNodes().item(0);
    System.out.println(item.getNodeName());
    Node lat = item.getAttributes().getNamedItem("latitude");
    String s = lat.getNodeValue();
    System.out.println(s.equals("36.8673380")); // Value of /pharmacies[@latitude]/value()

Ответ 4

Вам нужно использовать аптеки вместо аптеки, если вам нужно получить атрибуты для корневых аптек node. Вместо этого используйте метод getAttributes. Вы можете увидеть множество примеров на этом сайте. http://java.sun.com/developer/codesamples/xml.html#dom

Ответ 5

Попробуйте свою работу. Для меня Res - ваша последняя строка:

doc = b.parse(new ByteArrayInputStream(result.getBytes("UTF-8")));

    Node rootNode=doc.getDocumentElement();

    res = rootNode.getNodeName().toString();

Ответ 6

<pharmacies> сам по себе является элементом и может быть получен с использованием

Element pharmacies = doc.getDocumentElement();

Теперь эта ссылочная переменная pharmacies Элементы содержит все атрибуты в элементе <pharmacies>. Мы можем получить желаемые атрибуты один за другим, используя имя атрибута, например:

pharmacies.getAttribute("latitude");   // Will give 36.8673380
pharmacies.getAttribute("longitude");  // Will give 30.6346640