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 文档中标签之间的所有空格,使实际输出符合预期。
以下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 文档中标签之间的所有空格,使实际输出符合预期。