Как получить атрибуты корневого узла на Java - PullRequest
13 голосов
/ 19 января 2011

У меня есть XML-файл, как показано ниже. Я хочу получить атрибуты широты и долготы аптечных узлов. Я могу получить атрибуты chilnodes, но не могу получить атрибуты корневых узлов. Я новичок в 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"));

                    ....

Ответы [ 6 ]

27 голосов
/ 19 января 2011

Сам элемент <pharmacies> можно получить с помощью

Element pharmacies = doc.getDocumentElement();

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

6 голосов
/ 19 января 2011

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

3 голосов
/ 19 января 2011

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

    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()
0 голосов
/ 04 апреля 2016

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

Element pharmacies = doc.getDocumentElement();

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

pharmacies.getAttribute("latitude");   // Will give 36.8673380
pharmacies.getAttribute("longitude");  // Will give 30.6346640
0 голосов
/ 09 апреля 2014

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

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

    Node rootNode=doc.getDocumentElement();

    res = rootNode.getNodeName().toString();
0 голосов
/ 19 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...