سؤال

لدي XML، ولا يمكنني تحليل هذا الملف باستخدام xmlslurper. هنا نسخة من ملف 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>

أنا فقط بحاجة للحصول على نص من <Entrezgene_summary>

هنا الرمز الخاص بي:

  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
}

ورسالة الخطأ الخاصة بي:

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 

أنا لا أرى أين هو خطأي؟

أحاول أيضا: النتيجة .الججين = Efetchresult./entrezgene-set/.entrezgene.entrezgene_summary

شخص ما لديه فكرة؟ شكرا

هل كانت مفيدة؟

المحلول

لا تحتاج إلى dereference the tag (Enterersgene- Set>). ما يلي يعمل بالنسبة لي في 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}]"

راجع للشغل، تسبب رسالة الخطأ الخاصة بك عن محاولة استخدام اسم العقار مع اندفاعة فيه.

نصائح أخرى

شكرا لك، أنا فقط إصلاح مشكلتي بمساعدتك:

  • باستخدام علامات اقتباس، إذا كان هناك واصلة في عنصر XML الخاص بي (EX: quester.test = efetchresult.entrezgene.'entrezgene_track-info '.' Gene-track '.' gene-track_gineid ')
  • عن طريق حذف، المرجع العلامة العلامة العلامة (إذا كنت أحتفظ بمرجع العلامة العلامة أعلى، تكون قيم خرائطي فارغة - من الجيد أن تعرف ذلك :-)

هنا الإصلاح الخاص بي:

  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
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top