I am trying to add and remove tags in the xml tree (screenshot below). I have a dict of boolean values ββthat I use to determine whether to add or remove a tag. If the value is true and the element does not exist, it creates a tag (and its parent if it does not exist). If false, it removes the value.
However, it does not seem to work, and I cannot understand why.
<Assets> <asset name="Adham"> <pos> <x>27913.769923</x> <y>5174.627773</y> </pos> <GFX> <space>P03.png</space> <exterior>snow.png</exterior> </GFX> <presence> <faction>Dvaered</faction> <value>10.000000</value> <range>1</range> </presence> <general> <class>P</class> <population>100</population> <services> <land/> <refuel/> </services> <commodities/> <description>Fooo</description> <bar>(null)</bar> </general> </asset> </Assets>
code:
def writeflagX(self, root, x_path, _flag): ''' Writes flag to tree: deletes if false and already exists and adds if true but doesn't exist yet) ''' try: if root.xpath(x_path): if not self.flag[_flag]:
I am trying to change the mission flag from false to true, and the refuel flag from true to false.
#Change Missions to true and refuel to false foo = Asset() ###parsing code### foo.alist["Adham"].flag["Is_missions"] = True foo.alist["Adham"].flag["Is_refuel"] = False foo.alist["Adham"].writeALLflagsX(foo.alist["Adham"].node) foo.writeXML("output.xml")
I'm at a dead end. The mission tag is not added, and the refuel tag is not removed.
Does this have something to do with me by inserting try / except statements?
Edit: Ok, fixed the delete problem with a for loop, as suggested:
temp1 = root.xpath(x_path) for n in temp1: n.getparent().remove(n)
Unable to add node.
I think I'm going to ask a new question, which is simpler because it is too confusing.
Edit: a new question is much better: How to handle adding elements and their parents using xpath