basic xml parsing question

Discussion in 'Ruby' started by Geo Cooper, Mar 26, 2009.

  1. Geo Cooper

    Geo Cooper Guest

    I am just starting to program and am learning by using ruby, so this
    question is probably really basic.

    I have a a file that I want to put the contents into a sqlite database.
    This file is locally saved now, but will eventually be sent by remote
    machines for collecting the data from. I will not have to retrieve the
    documents, but I will have to figure out how to accept them when they
    are sent to me. I have read up a bit on REXML and Nokogiri, but am not
    sure where/how to get started.

    If someone can give me some pointers on where to start, that would be
    great.

    Below is a partial sample of what I'm trying to parse. The database
    tables correspond to the record names.

    Thanks for any help.

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    <!DOCTYPE peerfabric SYSTEM "peerfbrc.dtd">

    <peerxml peerid="app.001">

    <callsummary protocol="0" start="2009-03-07 19:07:05" end="2009-03-07
    19:08:03" duration="58" type="0" terminator="0" result="released"
    resultcode="" errorcode="" errortext="" watch="n" test="n"
    srcip="10.10.2.2" srcport="26483" srcid="10011" dstip="192.168.1.40"
    dstport="1720" dstid="50011" callid="278A3456D2021EF0E7E06941F06945D4"
    confid="F733C942932A3467C74B489695B18C80" publisher="app.001"
    score="99.165" caller="30011" called="70011">

    <calldetail srcmac="001C10F635B6" srcname="20011" srcdesc="App
    Version 1.7.1" dstmac="0004AC456B46" dstname="60011" dstdesc="App
    Version 1.7.1" connected="57370806" totaltime="57372979"
    responsetime="2173" alerttime="-1" answertime="2173" teardowntime="1575"
    avgtrans="787" netlatency="1874" totalbytes="140337" mediabytes="136944"
    totalpackets="1942" mediapackets="1902" lostpackets="0"
    signalscore="99.958" mediascore="98.967" srccause="16" dstcause="16"
    srclan="10.10.2.2" dstlan="192.168.1.40" />


    </callsummary>

    </peerxml>
    --
    Posted via http://www.ruby-forum.com/.
     
    Geo Cooper, Mar 26, 2009
    #1
    1. Advertising

  2. 2009/3/26 Geo Cooper <>:
    > I have a a file that I want to put the contents into a sqlite database.
    > This file is locally saved now, but will eventually be sent by remote
    > machines for =A0collecting the data from. I will not have to retrieve the
    > documents, but I will have to figure out how to accept them when they
    > are sent to me. I have read up a bit on REXML and Nokogiri, but am not
    > sure where/how to get started.


    Well, using REXML you have two options

    1. use REXML's DOM parsing, i.e. let it read in the whole file and
    create an XML DOM tree in memory. Then you can traverse that DOM tree,
    for example using XPath expressions and fill the DB while you do the
    traversal.

    2. use REXML's PUSH or PULL parsing and fill the DB while you receive
    the parsing events. In this scenario you will have to keep some state
    (e.g. information about the parent "callsummary" of a "calldetail")
    yourself.

    The second approach is usually more efficient because you never need
    the whole document in memory but it is also a bit more complex to
    implement.

    > If someone can give me some pointers on where to start, that would be
    > great.


    Some links

    http://www.germane-software.com/software/rexml/docs/tutorial.html
    http://www.w3schools.com/xpath/
    http://www.zvon.org/xxl/XPathTutorial/General/examples.html

    > Below is a partial sample of what I'm trying to parse. The database
    > tables correspond to the record names.


    What record names? Do you mean XML tags?

    Cheers

    robert

    --=20
    remember.guy do |as, often| as.you_can - without end
     
    Robert Klemme, Mar 26, 2009
    #2
    1. Advertising

  3. Geo Cooper

    Geo Cooper Guest

    Robert Klemme wrote:

    >
    >> Below is a partial sample of what I'm trying to parse. The database
    >> tables correspond to the record names.


    >
    > What record names? Do you mean XML tags?


    Yes, the tables correspond to the XML tags.

    Thanks for your help and links!
    Geo
    >
    > Cheers
    >
    > robert


    --
    Posted via http://www.ruby-forum.com/.
     
    Geo Cooper, Mar 26, 2009
    #3
  4. Geo Cooper

    Mark Thomas Guest

    On Mar 26, 11:02 am, Geo Cooper <> wrote:

    > Below is a partial sample of what I'm trying to parse. The database
    > tables correspond to the record names.


    Well, you have hierarchical data (calldetails inside of callsummary)
    so I'm not sure how you want to map it to your database, but here's a
    simple parsing example to get you started.

    Assuming you want all the attributes in each calldetail:

    doc = Nokogiri::XML.parse(xml)
    doc.search('//calldetail').each do |call|
    call.attributes.each do |key,value|
    puts key + "=" + value
    end
    end
     
    Mark Thomas, Mar 27, 2009
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Engineer
    Replies:
    6
    Views:
    628
    Jeremy Bowers
    May 1, 2005
  2. Replies:
    0
    Views:
    439
  3. Originlabs
    Replies:
    0
    Views:
    453
    Originlabs
    Apr 23, 2008
  4. John Levine
    Replies:
    0
    Views:
    733
    John Levine
    Feb 2, 2012
  5. Erik Wasser
    Replies:
    5
    Views:
    465
    Peter J. Holzer
    Mar 5, 2006
Loading...

Share This Page