-------- Original Message --------
Subject: Re: [xml] manipulating tree causes Seg fault
Date: Thu, 13 Aug 2009 08:55:42 -0500
From: Nick Lang <nick.l...@propylon.com>
To: Michael Ludwig <m...@as-guides.com>
References: <4a81e9c7.8090...@propylon.com>
<4a827980.2070...@as-guides.com> <4a82d492.4080...@propylon.com>
<4a830100.2030...@as-guides.com> <4a831447.2060...@propylon.com>
<4a83c3dd.9050...@as-guides.com>
Michael, below is my code, this isn't actually causing a seg fault, but
I think the segfault is a result of the pointers in memory getting all
screwed up in this "small action" and then later on down the line,
everything else blows up as well.
Anyway the code, and the sample xml file I'm trying to process are
included in this mail
Thanks
Nick
sample.xml:
<?xml version="1.0" encoding="UTF-8"?>
<office:document-content
xmlns:office="http://openoffice.org/2000/office"
xmlns:style="http://openoffice.org/2000/style"
xmlns:text="http://openoffice.org/2000/text"
xmlns:table="http://openoffice.org/2000/table"
xmlns:draw="http://openoffice.org/2000/drawing"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:meta="http://openoffice.org/2000/meta"
xmlns:number="http://openoffice.org/2000/datastyle"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:chart="http://openoffice.org/2000/chart"
xmlns:dr3d="http://openoffice.org/2000/dr3d"
xmlns:math="http://www.w3.org/1998/Math/MathML"
xmlns:form="http://openoffice.org/2000/form"
xmlns:script="http://openoffice.org/2000/script"
xmlns:ooo="http://openoffice.org/2004/office"
xmlns:ooow="http://openoffice.org/2004/writer"
xmlns:oooc="http://openoffice.org/2004/calc"
xmlns:dom="http://www.w3.org/2001/xml-events"
xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
office:version="1.0" office:class="text">
<office:script/>
<office:body>
<text:p text:style-name="Flavius Paragraph Center
Justified">xyz</text:p>
<text:p text:style-name="Flavius Paragraph Center
Justified">zabcz</text:p>
<text:p text:style-name="Flavius Paragraph Center
Justified">abc</text:p>
</office:body>
</office:document-content>
peel.py
#!/usr/bin/env python
import libxml2
import sys
def peel(doc, node):
"""
"""
children = node.get_children()
nodelist = []
while children:
nodelist.append(children)
children = children.next
removed = []
for n in nodelist:
n.unlinkNode()
removed.append(n)
removed.reverse()
for branch in removed:
if node.get_next() != None:
node.get_next().addPrevSibling(branch)
else:
node.parent.addChild(branch)
node.unlinkNode()
node.freeNode()
def paste_right(current_node, nodelist):
for node in nodelist:
current_node.addNextSibling(node)
def go(filename):
doc = libxml2.parseFile(filename)
root = doc.getRootElement()
ctxt = doc.xpathNewContext()
nodelist = ctxt.xpathEval("//text()")
xstring = """<e
xmlns:text="http://openoffice.org/2000/text">za<text:span
text:style-name='bold'>b</text:span>cz</e>"""
doc2 = libxml2.parseMemory(xstring,len(xstring))
root2 = doc2.getRootElement()
new_node = root2.copyNode(extended=1)
for n in nodelist:
if n.content == "zabcz":
to_be_replaced = n
paste_right(to_be_replaced, new_node)
to_be_replaced.addNextSibling(new_node)
peel(doc,new_node)
print "Peeling"
to_be_replaced.unlinkNode()
print to_be_replaced
print doc
if __name__ == "__main__":
go(sys.argv[1])
Michael Ludwig wrote:
Nick Lang schrieb:
Assuming we are using the same method I explained previously: If a
tree (called tree1) with a name space declaration is added to an
existing tree (called tree2), with more name spaces (including the one
from tree1). If the node, with the name space declaration from tree1
is removed, the the namespaced elements from tree1, now in tree2
should not be effected right?
I think a small example using miniature docs to illustrate this case is
in order.
A conformant implementation will work out namespace issues correctly as
long as you don't abuse the API. I seem to remember that disorder might
result if you mix createElementNS() and createElementNS().
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
xml@gnome.org
http://mail.gnome.org/mailman/listinfo/xml