Получить конкретный атрибут XML Java
Я пытаюсь прочитать этот XML-файл, и меня интересует только атрибут Item Name="PubDate".
<eSummaryResult>
<DocSum>
<Id>23373820</Id>
<Item Name="PubDate" Type="Date">2013 Mar</Item>
<Item Name="EPubDate" Type="Date">2013 Feb 1</Item>
<Item Name="Source" Type="String">Expert Opin Emerg Drugs</Item>
<Item Name="AuthorList" Type="List">...</Item>
<Item Name="LastAuthor" Type="String">Rascol O</Item>
<Item Name="Title" Type="String">...</Item>
<Item Name="Volume" Type="String">18</Item>
<Item Name="Issue" Type="String">1</Item>
<Item Name="Pages" Type="String">39-53</Item>
<Item Name="LangList" Type="List">...</Item>
<Item Name="NlmUniqueID" Type="String">101135662</Item>
<Item Name="ISSN" Type="String">1472-8214</Item>
<Item Name="ESSN" Type="String">1744-7623</Item>
<Item Name="PubTypeList" Type="List">...</Item>
<Item Name="RecordStatus" Type="String">PubMed - indexed for MEDLINE</Item>
<Item Name="PubStatus" Type="String">ppublish+epublish</Item>
<Item Name="ArticleIds" Type="List">...</Item>
<Item Name="DOI" Type="String">10.1517/14728214.2013.766168</Item>
<Item Name="History" Type="List">...</Item>
<Item Name="References" Type="List"/>
<Item Name="HasAbstract" Type="Integer">1</Item>
<Item Name="PmcRefCount" Type="Integer">2</Item>
<Item Name="FullJournalName" Type="String">Expert opinion on emerging drugs</Item>
<Item Name="ELocationID" Type="String">doi: 10.1517/14728214.2013.766168</Item>
<Item Name="SO" Type="String">2013 Mar;18(1):39-53</Item>
</DocSum>
</eSummaryResult>
когда мои программы проходят через следующий код
DocumentBuilderFactory dbPub = DocumentBuilderFactory.newInstance();
DocumentBuilder db2 = dbPub.newDocumentBuilder();
url1 = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=23373820";
Document docPmid = db2.parse(new URL(url1).openStream());
NodeList nl = docPmid.getElementsByTagName("Item");
if(nl !=null && nl.getLength() > 0)
{
for (int y = 0; y < nl.getLength(); y++)
{
Element el = (org.w3c.dom.Element) nl.item(y);
if (el.hasAttribute("Name") && el.getAttribute("Name").equals("PubDate"))
{
String pubDate = el.getAttribute("Name");
System.out.println("PubDate :"+pubDate);
}
}
}
Вместо получения PubDate:2013 Mar я получаю PubDate:PubDate
2 ответа
Вероятно, вы просто упустили из виду...
Вы используете то же самое, если
if (el.hasAttribute("Name") && el.getAttribute("Name").equals("PubDate"))
и позже то же самое для печати:
String pubDate = el.getAttribute("Name");
System.out.println("PubDate :"+pubDate);
что, вероятно, не то, что вы хотите сделать, вы хотите прочитать содержимое, а не значение атрибута...
В этой строке XML
<Item Name="PubDate" Type="Date">2013 Mar</Item>
у вас есть элемент с именем "Item", который имеет два атрибута:
- Name = 'PubDate'
- Type = 'Дата'
и значение, то есть "2013 мар".
В вашем коде, в строке:
String pubDate = el.getAttribute("Name");
вы запрашиваете значение атрибута с именем "Name", которое фактически является "PubDate".
Что вы хотите сделать, это найти элемент "Item", то есть атрибут "Name" равен "PubDate", а затем получить его значение с помощью функции "getNodeValue()".