2010-07-01 2 views
2

Я новичок в программировании, так что несите меня. У меня есть много документов XML, которые выглядят следующим образом:Обработка XML-файла с помощью Ruby и Nokogiri

Имя файла: PRIDE_Exp_Complete_Ac_10094.xml.gz

<ExperimentCollection version="2.1"> 
<Experiment> 
    <ExperimentAccession>1015</ExperimentAccession> 
    <Title>Protein complexes in Saccharomyces cerevisiae (GPM06600002310)</Title> 
    <ShortLabel>GPM06600002310</ShortLabel> 
    <Protocol> 
     <ProtocolName>None</ProtocolName> 
    </Protocol> 
    <mzData version="1.05" accessionNumber="1015"> 
     <cvLookup cvLabel="RESID" fullName="RESID Database of Protein Modifications" version="0.0" address="http://www.ebi.ac.uk/RESID/" /> 
     <cvLookup cvLabel="UNIMOD" fullName="UNIMOD Protein Modifications for Mass Spectrometry" version="0.0" address="http://www.unimod.org/" /> 
     <description> 
      <admin> 
       <sampleName>GPM06600002310</sampleName> 
       <sampleDescription comment="Ho, Y., et al., Systematic identification of protein complexes in Saccharomyces cerevisiae by mass spectrometry. Nature. 2002 Jan 10;415(6868):180-3."> 
        <cvParam cvLabel="NEWT" accession="4932" name="Saccharomyces cerevisiae (Baker's yeast)" value="Saccharomyces cerevisiae" /> 
       </sampleDescription> 
          </admin> 
     </description> 
     <spectrumList count="0" /> 
    </mzData> 
     </Experiment> 

Я хочу, чтобы вынуть текст между "Название", "ProtocolName", и "SampleName" и сохранить в текстовый файл с тем же именем, что и .xml.gz. У меня есть следующий код до сих пор (на основе на должностях, которые я видел на этом сайте), но это, кажется, не работает:

require 'rubygems' 
require 'nokogiri' 
doc = Nokogiri::XML(File.open("PRIDE_Exp_Complete_Ac_10094.xml.gz")) 
@ExperimentCollection = doc.css("ExperimentCollection Title").map {|node| node.children.text } 

Может кто-нибудь мне помочь?

Благодаря

+2

Что касается комментариев «пожалуйста, удалите для меня», вы оставили вместо своего вопроса (до того, как я вернусь к вопросу), вы можете удалить свои вопросы, используя ссылки ниже вашего текста вопроса (вы должны увидеть что-то вроде: 'edit | close | delete'), если вы хотите удалить его, вы можете это сделать, так как ** вы ** задаете вопрос. Я откатил его, потому что он кажется законным и заслуживает ответов. Если вы уже решили проблему, отправьте свое решение. В противном случае дайте им время, чтобы люди увидели его и предложили свою помощь. –

ответ

0

Если вы счастливы с REXML, и есть только один <Experiment> в файл, а затем что-то вроде следующего должно помочь ... (кстати, выше текст является недопустимым XML, так как не закрывающей <ExperimentCollection> тега)

require "rexml/document" 
include REXML 
xml=<<EOD 
<Experiment> 
    <ExperimentAccession>1015</ExperimentAccession> 
    <Title>Protein complexes in Saccharomyces cerevisiae (GPM06600002310)</Title> 
    <ShortLabel>GPM06600002310</ShortLabel> 
    <Protocol> 
     <ProtocolName>None</ProtocolName> 
    </Protocol> 
    <mzData version="1.05" accessionNumber="1015"> 
     <cvLookup cvLabel="RESID" fullName="RESID Database of Protein Modifications" version="0.0" address="http://www.ebi.ac.uk/RESID/" /> 
     <cvLookup cvLabel="UNIMOD" fullName="UNIMOD Protein Modifications for Mass Spectrometry" version="0.0" address="http://www.unimod.org/" /> 
     <description> 
      <admin> 
       <sampleName>GPM06600002310</sampleName> 
       <sampleDescription comment="Ho, Y., et al., Systematic identification of protein complexes in Saccharomyces cerevisiae by mass spectrometry. Nature. 2002 Jan 10;415(6868):180-3."> 
        <cvParam cvLabel="NEWT" accession="4932" name="Saccharomyces cerevisiae (Baker's yeast)" value="Saccharomyces cerevisiae" /> 
       </sampleDescription> 
          </admin> 
     </description> 
     <spectrumList count="0" /> 
    </mzData> 
     </Experiment> 
EOD 

doc = Document.new xml 
doc.elements["Experiment/Title"].text 
doc.elements["Experiment/Protocol/ProtocolName"].text 
doc.elements["Experiment/mzData/description/admin/sampleName"].text 
Смежные вопросы