Issue #2746: Don't escape ampersands and angle brackets ("&", "<", ">")

in XML processing instructions and comments.  These raw characters are
allowed by the XML specification, and are necessary when outputting e.g.
PHP code in a processing instruction.  Patch by Neil Muller.
This commit is contained in:
Antoine Pitrou 2010-02-09 17:08:05 +00:00
parent 7b5aa463f9
commit 42fb6ab491
4 changed files with 25 additions and 2 deletions

View File

@ -213,6 +213,23 @@ def check_encoding(ET, encoding):
"""
ET.XML("<?xml version='1.0' encoding='%s'?><xml />" % encoding)
def processinginstruction():
"""
Test ProcessingInstruction directly
>>> from xml.etree import ElementTree as ET
>>> ET.tostring(ET.ProcessingInstruction('test', 'instruction'))
'<?test instruction?>'
>>> ET.tostring(ET.PI('test', 'instruction'))
'<?test instruction?>'
Issue #2746
>>> ET.tostring(ET.PI('test', '<testing&>'))
'<?test <testing&>?>'
"""
#
# xinclude tests (samples from appendix C of the xinclude specification)

View File

@ -666,9 +666,9 @@ class ElementTree:
# write XML to file
tag = node.tag
if tag is Comment:
file.write("<!-- %s -->" % _escape_cdata(node.text, encoding))
file.write("<!-- %s -->" % _encode(node.text, encoding))
elif tag is ProcessingInstruction:
file.write("<?%s?>" % _escape_cdata(node.text, encoding))
file.write("<?%s?>" % _encode(node.text, encoding))
else:
items = node.items()
xmlns_items = [] # new namespaces in this scope

View File

@ -525,6 +525,7 @@ Pablo Mouzo
Sjoerd Mullender
Sape Mullender
Michael Muller
Neil Muller
R. David Murray
Piotr Meyer
John Nagle

View File

@ -78,6 +78,11 @@ Core and Builtins
Library
-------
- Issue #2746: Don't escape ampersands and angle brackets ("&", "<", ">")
in XML processing instructions and comments. These raw characters are
allowed by the XML specification, and are necessary when outputting e.g.
PHP code in a processing instruction. Patch by Neil Muller.
- Issue #7869: logging: improved diagnostic for format-time errors.
- Issue #7868: logging: added loggerClass attribute to Manager.