Tutorial

We will create a new XML file from scratch with 2 movies.

>>> import xmltool
>>> dtd_url = 'examples/movies.dtd'
>>> movies = xmltool.create('movies', dtd_url=dtd_url)
>>> movie_fmj = movies.add('movie')
>>> t = movie_fmj.add('title', 'Full Metal Jacket')
>>> r = movie_fmj.add('realisator', 'Stanley Kubrick')
>>> characters = movie_fmj.add('characters')
>>> c1 = characters.add('character', 'Matthew Modine')
>>> c2 = characters.add('character', 'Vincent D\'Onofrio')
>>> print movies
<movies>
  <movie>
    <title>Full Metal Jacket</title>
    <realisator>Stanley Kubrick</realisator>
    <characters>
      <character>Matthew Modine</character>
      <character>Vincent D'Onofrio</character>
    </characters>
  </movie>
</movies>

>>> movie_tit = movies.add('movie')
>>> t = movie_tit.add('title', 'Titanic')
>>> r = movie_tit.add('realisator', 'Cameron James')
>>> characters = movie_tit.add('characters')
>>> c1 = characters.add('character', 'Leonardo DiCaprio')
>>> c2 = characters.add('character', 'Kate Winslet')
>>> print movies
<movies>
  <movie>
    <title>Full Metal Jacket</title>
    <realisator>Stanley Kubrick</realisator>
    <characters>
      <character>Matthew Modine</character>
      <character>Vincent D'Onofrio</character>
    </characters>
  </movie>
  <movie>
    <title>Titanic</title>
    <realisator>Cameron James</realisator>
    <characters>
      <character>Leonardo DiCaprio</character>
      <character>Kate Winslet</character>
    </characters>
  </movie>
</movies>

>>> movies.write('examples/tutorial1.xml')

Insert element in list

We will add a new movie after “Full Metal Jacket” so we have to pass index=1. If you want to add the movie at the last place don’t pass index.

>>> import xmltool
>>> movies = xmltool.load('examples/tutorial1.xml')
>>> movie = movies.add('movie', index=1)
>>> print movies
<movies>
  <movie>
    <title>Full Metal Jacket</title>
    <realisator>Stanley Kubrick</realisator>
    <characters>
      <character>Matthew Modine</character>
      <character>Vincent D'Onofrio</character>
    </characters>
  </movie>
  <movie>
    <title></title>
    <realisator></realisator>
    <characters>
      <character></character>
    </characters>
  </movie>
  <movie>
    <title>Titanic</title>
    <realisator>Cameron James</realisator>
    <characters>
      <character>Leonardo DiCaprio</character>
      <character>Kate Winslet</character>
    </characters>
  </movie>
</movies>

Delete element

We will delete the movie “Full Metal Jacket” which is the first of the list.

>>> import xmltool
>>> movies = xmltool.load('examples/tutorial1.xml')
>>> movies['movie'][0].delete()
>>> print movies
<movies>
  <movie>
    <title>Titanic</title>
    <realisator>Cameron James</realisator>
    <characters>
      <character>Leonardo DiCaprio</character>
      <character>Kate Winslet</character>
    </characters>
  </movie>
</movies>

>>> movies.write()

Choice element

Add and delete choice element.

>>> import xmltool
>>> movies = xmltool.load('examples/tutorial1.xml')
>>> movie = movies['movie'][0]
>>> c1 = movie.add('good', 'Good movie')
>>> print movies
<movies>
  <movie>
    <title>Titanic</title>
    <realisator>Cameron James</realisator>
    <characters>
      <character>Leonardo DiCaprio</character>
      <character>Kate Winslet</character>
    </characters>
    <good>Good movie</good>
  </movie>
</movies>

>>> print movie['good'].text
Good movie
>>> movie.add('bad')
Traceback (most recent call last):
Exception: good is defined so you can't add bad
>>> movie['good'].delete()
>>> bad = movie.add('bad')
>>> print movies
<movies>
  <movie>
    <title>Titanic</title>
    <realisator>Cameron James</realisator>
    <characters>
      <character>Leonardo DiCaprio</character>
      <character>Kate Winslet</character>
    </characters>
    <bad></bad>
  </movie>
</movies>

List choice element

We will add a good-comment and a bad-comment

>>> import xmltool
>>> movies = xmltool.load('examples/tutorial1.xml')
>>> movie = movies['movie'][0]
>>> c1 = movie.add('good-comment', 'My comment 1')
>>> c2 = movie.add('bad-comment', 'My comment 2')
>>> print movies
<movies>
  <movie>
    <title>Titanic</title>
    <realisator>Cameron James</realisator>
    <characters>
      <character>Leonardo DiCaprio</character>
      <character>Kate Winslet</character>
    </characters>
    <good-comment>My comment 1</good-comment>
    <bad-comment>My comment 2</bad-comment>
  </movie>
</movies>

>>> movies.write()

Since {good,bad}-comment is a choice list it’s a bit different to access, a property named list__tag1_tag2_... is automatically create. For this example it’s list__good-comment_bad-comment.

>>> import xmltool
>>> movies = xmltool.load('examples/tutorial1.xml')
>>> comments = movies['movie'][0]['list__good-comment_bad-comment']
>>> print comments[0].text
My comment 1
>>> print comments[1].text
My comment 2