Ultrus wrote: > I'm attempting to generate a random story using xml as the document, > and lxml as the parser. I want the document to be simplified before > processing it further, and am very close to accomplishing my goal. > Below is what I have so far. Any ideas on how to move forward? > > The goal: > read and edit xml file, replacing random elements with randomly picked > content from within > > Completed: > [x] read xml > [x] access first random tag > [x] pick random content within random item > [o] need to replace <random> tag with picked contents > > xml sample: > <contents>Here is some content.</contents> > <random> > <item><contents>Here is some random content.</contents></item> > <item><contents>Here is some more random content.</contents></item> > </random> > <contents>Here is some content.</contents>
Hmm, this is not well-formed XML, so I assume you stripped the example. The root element is missing. > Python code: > from lxml import etree > from StringIO import StringIO > import random > > theXml = "<contents>Here is some content.</ > contents><random><item><contents>Here is some random content.</ > contents></item><item><contents>Here is some more random content.</ > contents></item></random><contents>Here is some content.</contents>" > > f = StringIO(theXml) > tree = etree.parse(f) ^^^^^ This would raise an exception if the above really *was* your input. > r = tree.xpath('//random') > > if len(r) > 0: > randInt = random.randInt(0,(len(r[0]) - 1)) > randContents = r[0][randInt][0] > #replace parent random tag with picked content here > > now that I have the contents tag randomly chosen, how do I delete the > parent <random> tag, and replace it to look like this: > > final xml sample (goal): > <contents>Here is some content.</contents> > <contents>Here is some random content.</contents> > <contents>Here is some content.</contents> what about: r.getparent().replace(r, random.choice(r)) ? Stefan -- http://mail.python.org/mailman/listinfo/python-list