以下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>
换句话说:print函数中的end=“”选项不能按预期工作。奇怪的是: 有时它会起作用(在“Fa”之后)。在其他情况下(例如在“apfel”之后),它不起作用。因为两个都是“Fa”。“Krause”和“apfel”是字符数据,characters()方法由内容处理程序应用于每种情况。尽管如此,结果还是不一样,这让整件事变得异常怪异。你知道吗
似乎解析器调用characters(),在标记之间使用空格,并且空格包含换行符,这些换行符被打印在预期输出不匹配的地方。你知道吗
删除示例xml文档中标记之间的所有空白将使实际输出与预期输出匹配。你知道吗
相关问题 更多 >
编程相关推荐