Skip to content Skip to sidebar Skip to footer

Code Being Dropped From Xml Created Using Python

I am copying and then updating a metadata xml file using python -this works fine except that the following code from the original metafile is being deleted

Solution 1:

I struggled with adding PI's to the start of an ElementTree document too. I came up with a solution using a fake root node (with None as the element tag) to hold any required processing instructions and then the real document root node.

import xml.etree.ElementTree as ET

# Build your XML document as normal...
root = ET.Element('root')

# Create 'fake' root node
fake_root = ET.Element(None)

# Add desired processing instructions.  Repeat as necessary.
pi = ET.PI("xml-stylesheet", "type='text/xsl' href='ANZMeta.xsl'")
pi.tail = "\n"
fake_root.append(pi)

# Add real root as last child of fake root
fake_root.append(root)

# Write to file, using ElementTree.write( ) to generate <?xml ...?> tag.
tree = ET.ElementTree(fake_root)
tree.write("doc.xml", xml_declaration=True)

The resulting doc.xml file:

<?xml version='1.0' encoding='us-ascii'?><?xml-stylesheet type='text/xsl' href='ANZMeta.xsl'?><root />

Solution 2:

If all your xml files have the same declaration, you can write it by yourself:

import xml.etree.ElementTree as ET


DECLARATION = """<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='ANZMeta.xsl'?>\n"""

tree = ET.parse(filename)
# do some work on treewithopen(filename, 'w') as output: # would be better to write to temp file and rename
    output.write(DECLARATION)
    tree.write(output, xml_declaration=False, encoding='utf-8') 
    # xml_declaration=False - don't write default declaration

Post a Comment for "Code Being Dropped From Xml Created Using Python"