Ich habe versucht, den folgenden Code auszuführen, aber xmlrpclib
hebt eine Ausnahme:Standard int-Wert mit xmlrpclib
>>> import xmlrpclib
>>> data = """<?xml version="1.0"?>
... <methodCall>
... <methodName>test_method</methodName>
... <params>
... <param>
... <value>
... <int/>
... </value>
... </param>
... </params>
... </methodCall>"""
>>> xmlrpclib.loads(data)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/xmlrpclib.py", line 1141, in loads
p.feed(data)
File "/usr/lib64/python2.7/xmlrpclib.py", line 558, in feed
self._parser.Parse(data, 0)
File "/usr/lib64/python2.7/xmlrpclib.py", line 829, in end
return f(self, join(self._data, ""))
File "/usr/lib64/python2.7/xmlrpclib.py", line 864, in end_int
self.append(int(data))
ValueError: invalid literal for int() with base 10: ''
Wenn ich ersetzen <int/>
durch <int></int>
, der Fehler gleich ist; aber mit <int>0</int>
wird keine Ausnahme ausgelöst. Gleiche Ergebnisse in python3 mit xmlrpc.client
.
Ich habe versucht, das Gleiche mit PHP, zu tun und es funktionierte ohne Probleme:
php > $data = '<?xml version="1.0"?><methodCall><methodName>test_method</methodName><params><param><value><int/></value></param></params></methodCall>';
php > print_r(xmlrpc_decode($data));
Array
(
[0] => 0
)
Die documentation aus der .NET-Implementierung bedeutet auch, dass <int/>
-0 übersetzt werden würde:
Wenn ein XML-RPC-Strukturelement fehlt, wird das entsprechende .NET-Strukturelement auf null gesetzt und nicht auf den Standardwert für den Typ, wenn ein nicht Nullable-Typ verwendet wurde, z. B. null anstelle von null für eine ganze Zahl.
Ist dieses Verhalten ein Fehler von der Python-Implementierung?
Ich denke schon. Füllen Sie den Fehlerbericht aus. – pacholik
@pacholik Ich stelle die Frage, weil ich zu diesem Thema auf der offiziellen Website von XML-RPC keine wirkliche Spezifikation gefunden habe. Vielleicht funktioniert die PHP-Implementierung einfach, weil die Entwickler beschlossen haben, diesen Fall trotz der XML-RPC-Spezifikationen ihren Implementierungen zu erlauben? – julienc
Ich sehe. Ich würde es trotzdem füllen - wenn PHP und .NET es unterstützen. – pacholik