【发布时间】:2020-10-05 18:27:29
【问题描述】:
我一直在尝试通过套接字从客户端向服务器发送 xml 字符串。思路是用ElementTree解析这个xml,然后使用得到的元素。
我可以成功地将字符串从客户端传递到服务器,但是无论我如何在客户端中构建 xml(通过文件、三引号字符串或使用 ElementTree 包中的方法),在服务器中我不断收到错误
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 0
我已经验证了文件/字符串,但我不确定错误在哪里,因为我真的没有任何直接使用 XML 文件的经验。
这是 XML 字符串
RemoteFunction = '''<?xml version="1.0"?>
<methodCall>
<methodName>somemethodname</methodName>
<params>
<param>
<value><string>somevalue</string></value>
</param>
<param>
<value><i4>1</i4></value>
</param>
<param>
<value><string>anothervalue</string></value>
</param>
</params>
</methodCall>'''
这是服务器中的连接处理函数
import xml.etree.ElementTree as ET
def client_handler( connection, address):
connected = True
while connected:
msgLen = connection.recv(64).decode("utf-8")
if msgLen:
msgLen = int(msgLen)
msg = connection.recv(msgLen).decode("utf-8")
if msg == "!Disconnect":
connected = False
tree = ET.fromstring(msg)
注意:我知道 Python3 中有一个用于 XMLRPC 的库,但我不允许使用它。
【问题讨论】:
-
在尝试将其解析为 XML 之前打印
msg会得到什么? -
这是打印出来的
msg<?xml version="1.0"?> <methodCall> <methodName>somemethodname</methodName> <params> <param> <value><string>somevalue</string></value> </param> <param> <value><i4>1</i4></value> </param> <param> <value><string>anothervalue</string></value> </param> </params> </methodCall> -
您的
msg是有效的xml,ET 和lxml 都可以正常读取。
标签: python-3.x xml sockets elementtree