我正在尝试实现一个协议,我将用于我的应用程序与服务器进行通信。问题是服务器正在使用XML,所以我尝试将字符串发送到包含xml的服务器,但我只得到错误。
当我发送时:
mymsg: String = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
'<m:outgoingEngineMessage xmlns:c="http://www.bvb.ro/xml/ns/arena/gw/constraints"'+
'xmlns:m="http://www.bvb.ro/xml/ns/arena/gw/msg"'+
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'+
'<content xsi:type="HeartBeatcmd">'+
'</content>'+
'<csq>100212</csq>'+
'</m:outgoingEngineMessage>';
我收到错误消息:
元素类型“m:outgoingEngineMessage”必须后跟任一个 属性规范,“&amp; gt;”或“/&amp; gt;”
当我发送时:
mymsg : String = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
'<m:outgoingEngineMessage xmlns:c="http://www.bvb.ro/xml/ns/arena/gw/constraints"'+
'xmlns:m="http://www.bvb.ro/xml/ns/arena/gw/msg"'+
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'+
'<content xsi:type="HeartBeatcmd">'+
'</content>'+
'<csq>100212</csq>'+
'</m:outgoingEngineMessage>'
我明白:元素不允许在prolog中...
有人可以告诉我我做错了什么吗?我之前从未使用过xml文件。是否有正确转换xml到utf8的功能?请解释一下。
答案 0 :(得分:6)
答案 1 :(得分:4)
您还需要在每行末尾添加一个空格,其中换行符位于属性之间。你实际上是把它们全部堵塞在一起:
<m:outgoingEngineMessage xmlns:c="http://www.bvb.ro/xml/ns/arena/gw/constraints"'+
'xmlns:m="http://www.bvb.ro/xml/ns/arena/gw/msg"'+
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
将产生:
<m:outgoingEngineMessage xmlns:c="http://www.bvb.ro/xml/ns/arena/gw/constraints"xmlns:m="http://www.bvb.ro/xml/ns/arena/gw/msg"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
要解决此问题,您需要执行以下操作(基于@ The_Fox的代码):
mymsg: String = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
'<m:outgoingEngineMessage xmlns:c="http://www.bvb.ro/xml/ns/arena/gw/constraints" '+
// see the space here --^
'xmlns:m="http://www.bvb.ro/xml/ns/arena/gw/msg" '+
// and here --^
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'+
'<content xsi:type="HeartBeatcmd">'+
'</content>'+
'<csq>100212</csq>'+
'</m:outgoingEngineMessage>';
答案 2 :(得分:1)
你正在逃避&lt;和&gt;在哪里你不应该。只有当它们不属于xml时才会转义这些实体。
像这样:
<content foo="bar">
2 + 2 > 3
</content>
而不是这样:
<content foo="bar%quot;>
2 + 2 > 3
</content>
所以你的xml看起来像这样:
mymsg: String = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
'<m:outgoingEngineMessage xmlns:c="http://www.bvb.ro/xml/ns/arena/gw/constraints" '+
'xmlns:m="http://www.bvb.ro/xml/ns/arena/gw/msg" '+
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'+
'<content xsi:type="HeartBeatcmd">'+
'</content>'+
'<csq>100212</csq>'+
'</m:outgoingEngineMessage>';