画面に書籍のISBNを入力して、国会図書館の書誌情報XMLから引っ張り情報を自動で登録するJavaのwebアプリを作っています。通信でデータを獲得するまではうまくいっているようですが、初挑戦にしては複雑な構造のXMLで情報が取得できません。下記の検索部分のコーデイングをどう変えたらよいか教えてください。取得する情報は次の通りです。よろしくお願いします。
内容 XMLのタグ
書名 dc:title
著者名 dc:creator
出版者 dc:publisher
分類 <lst name="NDC">
出版年 <lst name="ISSUED_DATE"><int name="1964'(例)> 属性nameの値を取得
Java
1package model; 2 3import java.net.HttpURLConnection; 4import java.net.URL; 5import java.util.Arrays; 6 7import javax.xml.parsers.DocumentBuilder; 8import javax.xml.parsers.DocumentBuilderFactory; 9 10import org.w3c.dom.Element; 11import org.w3c.dom.Node; 12import org.w3c.dom.NodeList; 13 14 15public class Retrieve { 16 17 18 19 public String[] retrieve(String ISBN){ 20 21 String [] data = new String[6]; 22 try { 23 URL url = new URL("https://iss.ndl.go.jp/api/sru?operation=searchRetrieve&query=isbn%3d%22"+ISBN+"%22"); 24 HttpURLConnection http = (HttpURLConnection)url.openConnection(); 25 http.setDoOutput(true); 26 http.setUseCaches(false); 27 http.setRequestMethod("GET"); 28 http.connect(); 29 30 DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); 31 DocumentBuilder builder = dbfactory.newDocumentBuilder(); 32 Element element = builder.parse(http.getInputStream()).getDocumentElement(); 33 34 35 data[5] = ISBN; 36 NodeList nodeList = element.getChildNodes(); 37 for(int i=0;i<nodeList.getLength();i++) { 38 Node node = nodeList.item(i); 39 if(node.getNodeType()== Node.ELEMENT_NODE) { 40 Element name = (Element)node; 41 System.out.println(node.getTextContent()); 42 if(name.getNodeName().equals("extraResponseData")) { 43 data[3] = ((Element) ((NodeList) node.getFirstChild()).item(1).getFirstChild()).getAttribute("name"); 44 data[4] = ((Element) ((NodeList) node.getFirstChild()).item(2).getFirstChild()).getAttribute("name"); 45 46 47 } 48 49 50 51 if(name.getNodeName().equals("records")) { 52 data[0]=((Element)element.getElementsByTagName("dc:title")).getTextContent(); 53 data[1]=((Element)element.getElementsByTagName("dc:creator")).getTextContent(); 54 data[2]=((Element)element.getElementsByTagName("dc:publisher")).getTextContent(); 55 56 } 57 } 58 } 59 60 61 http.disconnect(); 62 } 63 catch(Exception e) { 64 65 } 66 return data; 67 } 68}
XML
1<searchRetrieveResponse xmlns="http://www.loc.gov/zing/srw/"> 2<version>1.2</version> 3<numberOfRecords>1</numberOfRecords> 4<nextRecordPosition>0</nextRecordPosition> 5<extraResponseData> <facets> <lst name="REPOSITORY_NO"> <int name="R100000001">1</int> <int name="R100000002">1</int> </lst> <lst name="NDC"> </lst> <lst name="ISSUED_DATE"> <int name="2015">1</int> </lst> <lst name="LIBRARY"> <int name="さいたま市立中央図書館">1</int> <int name="国立国会図書館">1</int> <int name="堺市立中央図書館">1</int> <int name="大阪市立図書館">1</int> <int name="大阪府立中央図書館">1</int> <int name="奈良県立図書情報館">1</int> <int name="山口県立山口図書館">1</int> <int name="山形県立図書館">1</int> <int name="川崎市立図書館">1</int> <int name="新潟県立図書館">1</int> <int name="札幌市中央図書館">1</int> <int name="栃木県立図書館">1</int> <int name="沖縄県立図書館">1</int> <int name="滋賀県立図書館">1</int> <int name="県立長野図書館">1</int> <int name="福岡市総合図書館">1</int> <int name="群馬県立図書館">1</int> <int name="若狭図書学習センター">1</int> <int name="長崎県立長崎図書館">1</int> <int name="香川県立図書館">1</int> <int name="鳥取県立図書館">1</int> </lst> </facets> </extraResponseData> 6<records> 7<record> 8<recordSchema>info:srw/schema/1/dc-v1.1</recordSchema> 9<recordPacking>string</recordPacking> 10<recordData> <srw_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:srw_dc="info:srw/schema/1/dc-v1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="info:srw/schema/1/dc-v1.1 http://www.loc.gov/standards/sru/dc-schema.xsd"> <dc:title>できるWindows 10</dc:title> <dc:creator>法林岳之, 一ケ谷兼乃, 清水理史, できるシリーズ編集部 著</dc:creator> <dc:description>Home/Pro/Enterprise対応</dc:description> <dc:description>索引あり</dc:description> <dc:publisher>インプレス</dc:publisher> <dc:language>jpn</dc:language> </srw_dc:dc> </recordData> 11<recordPosition>1</recordPosition> 12</record> 13</records> 14</searchRetrieveResponse>
回答1件
あなたの回答
tips
プレビュー