以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 WORD to XML, HTML to XML 』  (http://bbs.xml.org.cn/list.asp?boardid=13)
----  如何将二进制数据转换生成XML?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=13&rootid=&id=84727)


--  作者:elephantooth
--  发布时间:5/12/2010 8:58:00 AM

--  如何将二进制数据转换生成XML?
通过网络接收到如下格式的信息
struct Msg
{
   double time;
   int      ID;
   char   buf[1024];
}

该信息存储在recvBuf中,请问:如何将该信息转换成如下所示的XML格式?
<Msg>
    <time>20100512</time>
    <ID>1</ID>
    <buf>"二进制数据"<buf>
</Msg>


--  作者:Qr
--  发布时间:5/12/2010 12:59:00 PM

--  
简单的代码好办,可实际上,代码不会那么简单吧,格式复杂多变,你如何去控制XML的格式?
--  作者:jj_long
--  发布时间:5/13/2010 9:47:00 AM

--  
我使用Java编写一个对象,如果我需要把这个对象的数据准换成XML进行存储或者传输,我一般会写两个函数:toXML()和fromXML(String xmlStr).

第一个函数将对象(在你的情况就是struct)的属性转换成XML。就是字符串操作。返回一个XML字符串。

第二个函数将XML变成一个对象,是第一个函数的反向操作。即:从XML字符串得到一个对象。


--  作者:elephantooth
--  发布时间:5/13/2010 1:01:00 PM

--  
消息格式确实复杂多变,而且需要支持扩展。

我用xsd来规范从网络接收的消息格式:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="Msg">
  <xs:annotation>
   <xs:documentation>Comment describing your root element</xs:documentation>
  </xs:annotation>
  <xs:complexType>
   <xs:sequence>
    <xs:element name="time" type="xs:double"/>
    <xs:element name="ID" type="xs:int"/>
    <xs:element name="buf">
     <xs:simpleType>
      <xs:restriction base="xs:string">
       <xs:length value="1024"/>
      </xs:restriction>
     </xs:simpleType>
    </xs:element>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>



--  作者:jj_long
--  发布时间:5/16/2010 11:46:00 PM

--  
此问题是语言内存结构(C结构/Java对象)到XML的映射。如果你需求是一个非常灵活的实现方式,楼主可以考虑使用一些通用的框架,比如: ,JiBx (Java工具http://jibx.sourceforge.net/index.html,我没有用过这个工具)。

另:
如果是和网络上其他程序远程调用,楼主可以考虑使用Web Service方式。


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms