2016-02-08 1 views
-3

J'essaie de lire ce fichier xml, et je ne suis intéressé que par l'attribut Item Name = "PubDate".obtenir un attribut spécifique xml java

<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> 

quand mes programmes passe par le code suivant

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); 
       } 
       } 
      } 

Au lieu d'obtenir Publication: 2013 Mar Je me Publication: Publication

+0

Veuillez modifier [votre message] (https://stackoverflow.com/posts/35261456/edit) et inclure l'intégralité du fichier XML. – RAnders00

+0

Qu'est-ce que vous voulez 'String pubDate = el.getAttribute (" Name ");' va faire? Vous voulez autre chose que je dirais ;-) – Betlista

+0

Vous devez lire le contenu de cet élément, pas un de ses attributs. – Matthew

Répondre

0

Probablement que vous venez de l'éviter ...

Vous utilisez la même chose si

if (el.hasAttribute("Name") && el.getAttribute("Name").equals("PubDate")) 

et plus tard le même pour l'impression:

String pubDate = el.getAttribute("Name"); 
System.out.println("PubDate :"+pubDate); 

qui est probablement pas ce que vous voulez faire, vous voulez lire le contenu, pas la valeur d'attribut ...

0

Dans cette ligne XML

<Item Name="PubDate" Type="Date">2013 Mar</Item> 

vous avez un élément appelé 'Item', qui a deux attributs:

  • Name = 'Publication'
  • type = 'Date'

et une valeur, qui est "2013 Mar".

Dans votre code, en ligne:

String pubDate = el.getAttribute("Name"); 

vous demandez une valeur de l'attribut appelé « Nom », qui est en fait « Publication ». Ce que vous voulez faire est de trouver un élément 'Item', son attribut 'Name' est égal à 'PubDate' et ensuite obtenir sa valeur avec la fonction 'getNodeValue()'.