Получить конкретный атрибут 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()".

Другие вопросы по тегам