python print() 函数中的选项 end="" 无法始终如一地工作

option end="" in python print() function does not work consistently

以下python代码:

import xml.sax

class C_Handler(xml.sax.ContentHandler):

    def startDocument(self):
        print("<html><head><title>Lieferungen</title></head>")
        print("<body><h1>Lieferungen</h1><hr>\n")
        print("<table border=\"1\"><tr><th>Nummer</th><th>Artikel</th><th>preis</th><th>Lieferant</th></tr>\n")


    def startElement(self, tag, attributes): 
        if tag == "artikel":
            print("<tr><td>{}</td> <td>".format(attributes["id"]),end="")
        if tag == "preis":
            print("</td> <td>", end="")
        if tag == "lieferant":
            print("</td> <td>", end="")

    def endElement(self, tag):
        if tag == "lieferant":
            print("</td> </tr>")

    def characters(self, content):
        print("{}".format(content), end="")

    def endDocument(self):
        print("\n</table>\n</body>\n</html>\n")

if ( __name__ == "__main__"):

    c = C_Handler()

    xml.sax.parse("lieferungen.xml", c)

应该转换以下 xml 文件:

<?xml version="1.0"?>
<lieferungen>
     <artikel id="3526">
         <name>apfel</name>
         <preis stueckpreis="true">8.97</preis>
         <lieferant>Fa. Krause</lieferant>
     </artikel>
</lieferungen>

进入以下输出:

<html><head><title>Lieferungen</title></head>
<body><h1>Lieferungen</h1><hr>

<table border="1"><tr><th>Nummer</th><th>Artikel</th><th>preis</th><th>Lieferant</th></tr>

<tr><td>3526</td> <td> apfel </td> <td> 8.97 </td> <td> Fa. Krause </td> </tr>

</table>
</body>
</html>

然而,我得到的是:

<html><head><title>Lieferungen</title></head>
<body><h1>Lieferungen</h1><hr>

<table border="1"><tr><th>Nummer</th><th>Artikel</th><th>preis</th>   <th>Lieferant</th></tr>


     <tr><td>3526</td> <td> 
        apfel  
       </td> <td> 8.97  
       </td> <td> Fa. Krause </td> </tr>

</table>
</body>
</html>

换句话说:打印函数中的 end="" 选项没有按预期工作。奇怪的是: 有时它有效(在 "Fa. Krause" 之后),而在其他情况下(例如在 "apfel" 之后)它不起作用。由于 "Fa. Krause" 和 "apfel" 都是字符数据,因此内容处理程序在每种情况下都应用 characters() 方法。结果还是不一样,这让整个事情变得非常奇怪。

解析器调用 characters() 时似乎带有标签之间的空格,并且该空格包含换行符,这些换行符打印在与预期输出不匹配的地方。

删除样本 xml 文档中标签之间的所有空格,使实际输出符合预期。