RT,接受xml然后转换成字符串,但是有时候,由于发送速度和网络传输速度影响,可能一次会接受几个完整的xml,但是还是要解析转换成的str,一个办法就是根据跟节点来讲这个解析出来的str分成几个完整的xml,然后添加入队列维护,从而解决了上述问题。不知道还有没有什么更好的常用的办法。?socketxml网络

解决方案 »

  1.   

    固定结构(xml数据可变长),但提供长度信息。
    比如
    0ff0(结构开始符号)
    xxxx(xml字节长度,例子是一个字节,如果不够长,可定义多个)
    yyyy(开始传递xml数据)
    yyyy
    ......
    zzzz(校验部分,这里写校验信息)
    f00f(结构结束)这种数据传递结构,常常在串口使用,想来socket也很好用吧
    每一对0ff0和f00f之间是一个xml
    记得如果是串口的话,最好去看下海明距离啥的。socket。。个人觉得应该可以随意定
      

  2.   

    用socket传输数据,你要定义好自己的传输协议,就像一楼说的方式。
      

  3.   

    确实,你这个办法是更加严密的方法,思想是一样的,谢谢你。如果简单一点,每个xml数据的根元素不变,然后每次都会根据根元素这个结束标志来拆分xml,这样比较简单。
      

  4.   

    严格xml的话就不需要什么协议,字符串流已经足够。
    一边传输一边parse:如果看到<tag>,就放进栈,如果看到</tag>,就出栈,当你的栈空了,你就知道一个完整的xml出现了
      

  5.   

    既然得到了字符串,就直接进行拆分啊,直接根据相关的元素标记生成新的完整的xml即可。
      

  6.   

    既然得到了字符串,就直接进行拆分啊,直接根据相关的元素标记生成新的完整的xml即可。
    假设你收到了个xml长成这样:
    <root>
      <!-- <root> ... </root> -->
    </root>
    如果不做进一步的解析,直接用字符串split,会错的
      

  7.   

    既然得到了字符串,就直接进行拆分啊,直接根据相关的元素标记生成新的完整的xml即可。
    假设你收到了个xml长成这样:
    <root>
      <!-- <root> ... </root> -->
    </root>
    如果不做进一步的解析,直接用字符串split,会错的
    所以说就需要自己定义一套xml规范啊,保证跟元素的唯一性和不会由于解析规则而出现错误解析。不过,你说的这个方法也是确实可行的,也更加的健壮。
      

  8.   

    如果这么做,你只有读到</root>字符串,才能判断一个xml结束。
    首先,希望你用到的堆栈要足够大;
    其次,读到<!-- 要读到其真正对应的-->(如果字符串里有多个-->,你得想办法知道哪个是最后的,或许换行符是个好办法;
      

  9.   

    要判断一个字符串首先是不是完整,其次才是不是严格的xml,这个难道都要在socket里实现?有这个必要吗?