Question

J'ai un xml, et je ne peux pas analyser ce fichier avec XmlSlurper. Voici une copie de mon fichier xml:

<Entrezgene-Set>
<Entrezgene>
<Entrezgene_summary>The protein encoded by this gene is a plasma glycoprotein of unknown function. The protein shows sequence similarity to the variable regions of some immunoglobulin supergene family member proteins. [provided by RefSeq]</Entrezgene_summary>
</Entrezgene>
</Entrezgene-Set>

J'ai juste besoin d'obtenir le texte de <Entrezgene_summary>

Voici mon code:

  def pubmedEfetch = {

  def base = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?"
  def qs = []
  qs << "db=gene"
  qs << "id=1"
  qs << "retmode=xml"
  def url = new URL(base + qs.join("&"))
  def connection = url.openConnection()

  def result = [:]

  if(connection.responseCode == 200){
    def xml = connection.content.text
    def eFetchResult = new XmlSlurper().parseText(xml)
    result.geneSummary = eFetchResult.Entrezgene-Set.Entrezgene.Entrezgene_summary
  }
  else{
    log.error("PubmedEfetchParserService.PubmedEsearch FAILED")
    log.error(url)
    log.error(connection.responseCode)
    log.error(connection.responseMessage)
  }
  render result
}

Et mon message d'erreur:

Error 500: groovy.lang.MissingPropertyException: No such property: Entrezgene for class: java.util.Set
Servlet: grails
URI: /geneInfo/grails/genes/pubmedEfetch.dispatch
Exception Message: No such property: Entrezgene for class: java.util.Set 
Caused by: groovy.lang.MissingPropertyException: No such property: Entrezgene for class: java.util.Set 
Class: GenesController 

Je ne vois pas où est ma faute?

J'essaie aussi: result.geneSummary = eFetchResult./Entrezgene-Set/.Entrezgene.Entrezgene_summary

Quelqu'un a une idée? Merci

Était-ce utile?

La solution

Vous n'avez pas besoin de déréférencer l'étiquette supérieure (Entersgene-Set>). Les œuvres suivantes pour moi dans groovyconsole:

xml = """<Entrezgene-Set>
<Entrezgene>
   <Entrezgene_summary>The protein encoded by this gene is a plasma glycoprotein of unknown function. The protein shows sequence similarity to the variable regions of some immunoglobulin supergene family member proteins. [provided by RefSeq]
   </Entrezgene_summary>
</Entrezgene>
</Entrezgene-Set>
"""


def eFetchResult = new XmlSlurper().parseText(xml)
x = eFetchResult.Entrezgene.Entrezgene_summary
println "x is [${x}]"

BTW, votre message d'erreur est provoqué en essayant d'utiliser un nom de propriété avec un tableau de bord en elle.

Autres conseils

Merci, Je viens juste de régler mon problème avec votre aide:

  • en utilisant des guillemets, s'il y a un trait d'union dans mon élément xml (ex: « . 'Result.test = eFetchResult.Entrezgene.'Entrezgene_track-info Gene-track Gene-track_geneid ''.'),
  • par suppression, la référence de l'étiquette supérieure (si je garde la référence d'étiquette haut, mes valeurs de carte sont vides - il est bon de savoir que: -)

Voici mon fix:

  def pubmedEfetch = {

  def base = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?"
  def qs = []
  qs << "db=gene"
  qs << "id=1"
  qs << "retmode=xml"
  def url = new URL(base + qs.join("&"))
  def connection = url.openConnection()

  def result = [:]

  if(connection.responseCode == 200){
    def xml = connection.content.text
    def eFetchResult = new XmlSlurper().parseText(xml)
    result.geneSummary = eFetchResult.Entrezgene.Entrezgene_summary
  }
  else{
    log.error("PubmedEfetchParserService.PubmedEsearch FAILED")
    log.error(url)
    log.error(connection.responseCode)
    log.error(connection.responseMessage)
  }
  render result
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top