XML Newbie needing some serious help..

rh0dium sklass at pointcircle.com
Thu May 19 20:27:05 EDT 2005


HI all,

I am looking to parse a unix tool called lshw (
http://ezix.sourceforge.net/software/lshw.html ).  Now this provides a
nice XML output which looks similar to the bottom of this message..

Now I want to parse and get some information from it so here is what I
have..

class HWParser:
    def __init__(self):
        if os.path.isfile(LSHW):
            lshw=Exec.Exec(LSHW)
            lshw.execute('-xml')
        else:
            print "lshw does not exist", LSWH
            return "Unknown"
        self.data  = lshw.read()
        self.error = lshw.error()
        self.exit  = lshw.poll()

        if self.error:
            print "Error Exist", self.error
            return
        else:
            self.xml = minidom.parseString(self.data)
            self.xml.normalize()
            self.context=xml.xpath.Context.Context(self.xml)

    def CPUType(self):
        nodes = xml.xpath.Evaluate("//processor/description/text()",
context=self.context)
        for node in nodes:
                print node.nodeValue

    def p (self):
        print self.xml.toxml()

c=HWParser()
c.p()
c.CPUType()

Now if you can't tell I am a newbie and really want to have some help
here.  I know the c.p does work and it does spit out all of the XML
backout.  So getting the data in is not a problem, getting it out
appears to be a problem.

Basically my problem is that I want to bet able to say get me the type
of CPU we have.  I know I could grep this information but I'd rather do
it the proper way.
So when I call c.CPUType it should return
 [ Intel(R) Xeon(TM) CPU 2.8Ghz, Intel(R) Xeon(TM) CPU 2.8Ghz ]
 because there is two of them..

Am I asking too much?  Probably just an idiot at the wheel :)  Feel
free to comment on my style as well as hey - that's probably a bit
messy too :)


Thanks much


--------------------------------------------------



<?xml version="1.0" standalone="yes" ?>
<!-- generated by lshw-B.02.03 -->
<!-- GCC 3.2.3 20030502 (Red Hat Linux 3.2.3-42) -->
    <node id="cpu:0" claimed="true" class="processor"
handle="DMI:0400">
       <description>CPU</description>
       <product>Intel(R) Xeon(TM) CPU 2.80GHz</product>
       <vendor>Intel Corp.</vendor>
       <physid>400</physid>
       <businfo>cpu at 0</businfo>
       <version>15.2.7</version>
       <slot>Proc_1</slot>
       <size units="Hz">2800000000</size>
       <capacity units="Hz">3000000000</capacity>
       <width units="bits">32</width>
       <clock units="Hz">400000000</clock>
       <configuration>
          <setting id="id" value="6" />
       </configuration>
       <capabilities>
          <capability id="fpu" >mathematical co-processor</capability>
          <capability id="fpu_exception" >FPU exceptions
reporting</capability>
          <capability id="wp" />
          <capability id="vme" >virtual mode extensions</capability>
          <capability id="de" >debugging extensions</capability>
          <capability id="pse" >page size extensions</capability>
          <capability id="tsc" >time stamp counter</capability>
          <capability id="msr" >model-specific registers</capability>
          <capability id="pae" >4GB+ memory addressing (Physical
Address Extension)</capability>
          <capability id="mce" >machine check exceptions</capability>
          <capability id="cx8" >compare and exchange
8-byte</capability>
          <capability id="apic" >on-chip advanced programmable
interrupt controller (APIC)</capability>
          <capability id="sep" >fast system calls</capability>
          <capability id="mtrr" >memory type range
registers</capability>
          <capability id="pge" >page global enable</capability>
          <capability id="mca" >machine check architecture</capability>
          <capability id="cmov" >conditional move
instruction</capability>
          <capability id="pat" >page attribute table</capability>
          <capability id="pse36" >36-bit page size
extensions</capability>
          <capability id="clflush" />
          <capability id="dts" >debug trace and EMON store
MSRs</capability>
          <capability id="acpi" >thermal control (ACPI)</capability>
          <capability id="mmx" >multimedia extensions
(MMX)</capability>
          <capability id="fxsr" >fast floating point
save/restore</capability>
          <capability id="sse" >streaming SIMD extensions
(SSE)</capability>
          <capability id="sse2" >streaming SIMD extensions
(SSE2)</capability>
          <capability id="ss" >self-snoop</capability>
          <capability id="ht" >HyperThreading</capability>
          <capability id="tm" >thermal interrupt and
status</capability>
       </capabilities>
       <node id="logicalcpu:0" claimed="true" class="processor"
handle="CPU:6.0">
          <description>Logical CPU</description>
          <physid>6.1</physid>
          <width units="bits">32</width>
          <capabilities>
             <capability id="logical" >Logical CPU</capability>
          </capabilities>
       </node>
       <node id="logicalcpu:1" claimed="true" class="processor"
handle="CPU:6.1">
          <description>Logical CPU</description>
          <physid>6.2</physid>
          <width units="bits">32</width>
          <capabilities>
             <capability id="logical" >Logical CPU</capability>
          </capabilities>
       </node>
    </node>
    <node id="cpu:1" disabled="true" claimed="true" class="processor"
handle="DMI:0401">
       <description>CPU</description>
       <product>Intel(R) Xeon(TM) CPU 2.80GHz</product>
       <vendor>Intel Corp.</vendor>
       <physid>401</physid>
       <businfo>cpu at 1</businfo>
       <version>15.2.7</version>
       <slot>Proc_2</slot>
       <size units="Hz">2800000000</size>
       <capacity units="Hz">3000000000</capacity>
       <width units="bits">32</width>
       <clock units="Hz">400000000</clock>
       <configuration>
          <setting id="id" value="6" />
       </configuration>
       <capabilities>
          <capability id="fpu" >mathematical co-processor</capability>
          <capability id="fpu_exception" >FPU exceptions
reporting</capability>
          <capability id="wp" />
          <capability id="vme" >virtual mode extensions</capability>
          <capability id="de" >debugging extensions</capability>
          <capability id="pse" >page size extensions</capability>
          <capability id="tsc" >time stamp counter</capability>
          <capability id="msr" >model-specific registers</capability>
          <capability id="pae" >4GB+ memory addressing (Physical
Address Extension)</capability>
          <capability id="mce" >machine check exceptions</capability>
          <capability id="cx8" >compare and exchange
8-byte</capability>
          <capability id="apic" >on-chip advanced programmable
interrupt controller (APIC)</capability>
          <capability id="sep" >fast system calls</capability>
          <capability id="mtrr" >memory type range
registers</capability>
          <capability id="pge" >page global enable</capability>
          <capability id="mca" >machine check architecture</capability>
          <capability id="cmov" >conditional move
instruction</capability>
          <capability id="pat" >page attribute table</capability>
          <capability id="pse36" >36-bit page size
extensions</capability>
          <capability id="clflush" />
          <capability id="dts" >debug trace and EMON store
MSRs</capability>
          <capability id="acpi" >thermal control (ACPI)</capability>
          <capability id="mmx" >multimedia extensions
(MMX)</capability>
          <capability id="fxsr" >fast floating point
save/restore</capability>
          <capability id="sse" >streaming SIMD extensions
(SSE)</capability>
          <capability id="sse2" >streaming SIMD extensions
(SSE2)</capability>
          <capability id="ss" >self-snoop</capability>
          <capability id="ht" >HyperThreading</capability>
          <capability id="tm" >thermal interrupt and
status</capability>
       </capabilities>
       <node id="logicalcpu:0" claimed="true" class="processor"
handle="CPU:6.0">
          <description>Logical CPU</description>
          <physid>6.1</physid>
          <width units="bits">32</width>
          <capabilities>
             <capability id="logical" >Logical CPU</capability>
          </capabilities>
       </node>
       <node id="logicalcpu:1" claimed="true" class="processor"
handle="CPU:6.1">
          <description>Logical CPU</description>
          <physid>6.2</physid>
          <width units="bits">32</width>
          <capabilities>
             <capability id="logical" >Logical CPU</capability>
          </capabilities>
       </node>
    </node>




More information about the Python-list mailing list