以下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()方法。但结果却不一样,这使整个事情变得非常奇怪。
答案 0 :(得分:2)
似乎解析器使用标记之间的空格调用characters(),并且该空格包含换行符,这些换行符将打印在预期输出不匹配的位置。
删除示例xml文档中标记之间的所有空格使实际输出与预期匹配。