Как получить атрибуты корневого узла на java
у меня есть 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 ответов
на <pharmacies>
сам элемент можно получить с помощью
Element pharmacies = doc.getDocumentElement();
Вы можете получить атрибуты из этого.
doc.getDocumentElement()
возвращает корневой элемент и вы можете называть getAttribute( attrName )
на нем, как и на любом другом элементе.
попробуйте следующее:
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()
вам нужно использовать аптеки вместо аптеки, если вам нужно получить атрибуты для аптек корневого узла.И вместо этого используйте метод getAttributes.Вы можете увидеть много примеров на этом сайте. http://java.sun.com/developer/codesamples/xml.html#dom
попробуйте свою работу для меня, Res-ваша последняя строка:
doc = b.parse(new ByteArrayInputStream(result.getBytes("UTF-8")));
Node rootNode=doc.getDocumentElement();
res = rootNode.getNodeName().toString();
на <pharmacies>
сам по себе является элементом и может быть получен с помощью
Element pharmacies = doc.getDocumentElement();
вот этот pharmacies
ссылка переменной элементов содержит все атрибуты <pharmacies>
элемент. Мы можем получить желаемые атрибуты один за другим, используя имя атрибута, например:
pharmacies.getAttribute("latitude"); // Will give 36.8673380
pharmacies.getAttribute("longitude"); // Will give 30.6346640