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) 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) # xinclude tests (samples from appendix C of the xinclude specification)

View file

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

View file

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

View file

@ -78,6 +78,11 @@ Core and Builtins
Library 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 #7869: logging: improved diagnostic for format-time errors.
- Issue #7868: logging: added loggerClass attribute to Manager. - Issue #7868: logging: added loggerClass attribute to Manager.