选项结束=""在python print()函数不能一致地工作

时间:2016-12-24 21:38:55

标签: python printing sax

以下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>

换句话说:结束=&#34;&#34;打印功能中的选项无法按预期工作。奇怪的是这个: 有时它起作用(在#34; Fa.Krause&#34;之后)和其他情况下(例如在&#34; apfel&#34;之后)它不起作用。因为两个&#34;法。克劳斯&#34;和&#34; apfel&#34;是字符数据,每种情况下由内容处理程序应用characters()方法。但结果却不一样,这使整个事情变得非常奇怪。

1 个答案:

答案 0 :(得分:2)

似乎解析器使用标记之间的空格调用characters(),并且该空格包含换行符,这些换行符将打印在预期输出不匹配的位置。

删除示例xml文档中标记之间的所有空格使实际输出与预期匹配。