##
13.6.2 DOM Example

This example program is a fairly realistic example of a simple program. In this particular case, we do not take much advantage of the flexibility of the DOM.

      import xml.dom.minidom

      document = """\
      <slideshow>
      <title>Demo slideshow</title>
      <slide><title>Slide title</title>
      <point>This is a demo</point>
      <point>Of a program for processing slides</point>
      </slide>

      <slide><title>Another demo slide</title>
      <point>It is important</point>
      <point>To have more than</point>
      <point>one slide</point>
      </slide>
      </slideshow>
      """

      dom = xml.dom.minidom.parseString(document)

      space = " "
      def getText(nodelist):
          rc = ""
          for node in nodelist:
              if node.nodeType == node.TEXT_NODE:
                  rc = rc + node.data
          return rc

      def handleSlideshow(slideshow):
          print "<html>"
          handleSlideshowTitle(slideshow.getElementsByTagName("title")[0])
          slides = slideshow.getElementsByTagName("slide")
          handleToc(slides)
          handleSlides(slides)
          print "</html>"

      def handleSlides(slides):
          for slide in slides:
             handleSlide(slide)

      def handleSlide(slide):
          handleSlideTitle(slide.getElementsByTagName("title")[0])
          handlePoints(slide.getElementsByTagName("point"))

      def handleSlideshowTitle(title):
          print "<title>%s</title>" % getText(title.childNodes)

      def handleSlideTitle(title):
          print "<h2>%s</h2>" % getText(title.childNodes)

      def handlePoints(points):
          print "<ul>"
          for point in points:
              handlePoint(point)
          print "</ul>"

      def handlePoint(point):
          print "<li>%s</li>" % getText(point.childNodes)

      def handleToc(slides):
          for slide in slides:
              title = slide.getElementsByTagName("title")[0]
              print "<p>%s</p>" % getText(title.childNodes)

      handleSlideshow(dom)