以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML工具及XML开发环境 』  (http://bbs.xml.org.cn/list.asp?boardid=7)
----  请问php怎么解析burlap(各位高手请进)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=7&rootid=&id=37225)


--  作者:dangki
--  发布时间:8/26/2006 10:19:00 AM

--  请问php怎么解析burlap(各位高手请进)
burlap内容如下:
<burlap:call>
<method>setAdDetail</method>
<map>
<type>com.netease.bid.client.model.Ad</type>
<string>id</string><long>-888</long>
<string>title</string><string>888</string>
<string>desc1</string><string>888</string>
<string>desc2</string><string>888</string>
<string>url</string><string>http://www.888.com</string>
<string>dispUrl</string><string>http://www.888.com</string>
<string>area</string><string>1</string>
<string>areas</string><list><length>2</length><int>16</int><int>27</int></list>
<string>appearTime</string><int>1</int>
<string>disappTime</string><int>12</int>
<string>dayBudget</string><string>16</string>
<string>keywords</string><map><type></type>
<long>-58810201</long>
<map>
<type>com.netease.bid.client.model.Keyword</type>
<string>id</string><long>-58810201</long>
<string>name</string><string>原始关键词8</string>
<string>status</string><int>0</int>
<string>mode</string><int>0</int>
<string>clickCost</string>
<map>
<type>java.math.BigDecimal</type><string>value</string><string>10</string>
</map>
<string>topPrice</string><string>0.3</string>
</map>
<long>-52610072</long>
<map>
<type>com.netease.bid.client.model.Keyword</type>
<string>id</string><long>-52610072</long>
<string>name</string><string>原始关键词88</string>
<string>status</string><int>0</int>
<string>mode</string><int>0</int>
<string>clickCost</string>
<map>
<type>java.math.BigDecimal</type><string>value</string><string>11</string>
</map>
<string>topPrice</string><string>0.3</string>
</map>
<long>-79731473</long>
<map>
<type>com.netease.bid.client.model.Keyword</type>
<string>id</string><long>-79731473</long>
<string>name</string><string>原始关键词888</string><string>status</string><int>0</int>
<string>mode</string><int>0</int>
<string>clickCost</string>
<map>
<type>java.math.BigDecimal</type><string>value</string><string>12</string>
</map><string>topPrice</string><string>0.3</string>
</map></map>
<string>status</string><int>1</int>
</map>
</burlap:call>
--  作者:fantix
--  发布时间:5/17/2007 10:59:00 AM

--  
布尔型
32位整型
64位长整型
64位双精度浮点型
ISO-8609日期类型
UTF-8编码的字符串类型
UTF-8编码的XML
base64二进制数据
远程对象
 两种组合类型:
list 用于表示列表与数组
map 用于表示对象与哈希表
 最后,还有两种特殊的类型:
null 表示空指针类型
ref 表示共享的或循环的对象引用
 下面详细说明每一种类型的SML描述语法。

<null> 空指针类型
 null表示了一个空指针。根据SML语言定义,单独的<null>标记是非法的,正确的null标记应该有打开标记与关闭标记。<null>标记可以用来替换以下任何标记:
<string>
<xml>
<base64>
<list>
<map>
<remote>

<null></null> 

<boolean> 布尔类型
 布尔类型的值使用0与1来表示。

<boolean>0</boolean> 

<int> 32位整型
 32位有符号整数。

<int>-32132</int> 

<long> 64位长整型
 64位有符号长整数。

<long>1000000000</long> 

<double> 64位双精度浮点型
 64位IEEE浮点数。

<double>1234.9431e12</double> 

<string> UTF-8编码的字符串类型
 由16位Unicode字符组成的的字符串,使用UTF-8编码。UTF-8编码服从SML语言规范。相似地,只有四个转义字符:“&#xx;”、“&lt;”、“&gt;”与“&amp;”,并且所有的空白都是有效的。

<string>Escape the less than symbol as &lt; or
using the numeric escape &
Here goes some chinese characters:
\u9752\u5c9b\u51fa\u53e3\u9000\u7a0e\u670d\u52a1\u7f51
</string> 

<xml> UTF-8编码的XML
 由16位Unicode字符组成的XML文档,使用UTF-8编码,服从<string>的规范。像“<”这样的特殊字符,必须使用转义字符。只有四个可用的转义字符:“&#xx;”、“&lt;”、“&gt;”与“&amp;”,并且所有的空白都是有效的。

<xml>
&lt;top&gt;
  &lt;body test='foo'/&gt;
&lt;/top&gt;
</xml> 
 注意:因为这种规范并没有定义语言映射,所以可以随意实现读取<xml>标记内容,比如返回字符串。

<base64> base64二进制数据
 base64编码的二进制数据流。Base64字符串中,任何单元之后可以有空白,但是单元之中不允许由空白。

<base64>
zxc9Z9
m2z8==
</base64> 

<list> 列表与数组
 这种类型表示一个有序的列表,如同一个数组。在<list>中,使用<type>标记描述列表元素的类型,使用<length>元素说明列表种元素的个数。<type>元素与<length>元素都是必须的,但是可以为空。如果<length>元素是空的,那么解析器将在</list>之前,根据列表实际拥有元素的个数来确定<length>的值。
 <list>定义为:list = (type, length, (%object;)*)
 每一个<list>条目都被添加到引用列表中,详见<ref>元素。
 <list>标记还可以被<null>或者<ref>来represent,所以解析器必须做好准备,以便识别这三种的任意一种。

Java中int[]类型的序列化结果 
<list>
  <type>[int</type>
  <length>3</length>
  <int>0</int>
  <int>1</int>
  <int>2</int>
</list> 
Java中ArrayList类型的序列化结果 
<list>
  <type></type>
  <length>3</length>
  <int>0</int>
  <double>1.3</double>
  <string>foobar</string>
</list> 

 注意:本规范没有说明什么样的<list>标记值属于有效值,//TODO:

<map> 对象与哈希表
 <map>表示序列化的对象与哈希表(Hashtable)。在<map>中,由<type>元素来描述<map>的类型。对与对象,在<map>中表示了从成员变量名,到它们的值的所有信息,<type>表示了这个对象的类型。
 <map>定义为:map ::= (type, ((%object;), (%object;))*)
 <type>元素是强制性的,尽管它的值也可以是空。对与对象来说,必须忽略无法识别的key。
 每一个<map>都被添加到引用列表中,详见<ref>元素。
 <map>标记也可以被<null>或者<ref>来represent。

一个普通Java类实现了Serializable接口 
public class Car implements Serializable {
    String model = "Beetle";
    String color = "aquamarine";
    int mileage = 230431;

该类对象的序列化结果 
<map>
  <type>com.caucho.test.Car</type>

  <string>model<string>
  <string>Beetle</string>

  <string>color<string>
  <string>aquamarine</string>

  <string>mileage<string>
  <int>230431</int>
</map> 

创建一个Java稀疏数组 
map = new HashMap();
map.put(new Integer(1), "fee");
map.put(new Integer(75), "fie");
map.put(new Integer(932), "foe"); 
该对象的序列化结果 
<map>
  <type>java.util.HashMap</type>

  <int>1<int><string>fee</string>
  <int>75<int><string>fie</string>
  <int>932<int><string>foe</string>
</map> 

<ref> 共享的或循环的对象引用
 <ref>的值是一个整数引用,指向了前面的一个<list>或是<map>实例。随着每一个<list>与<map>从输入流中被读出,它们都被依次用整数标记。后面的<ref>可以引用到前面的对象。
 <ref>定义为:ref ::= #CDATA
 <ref>可以引用尚未读取完的对象。比如,一个递归定义的列表可以在整个<list>读取完之前,引用这个列表本身。
 一种可行的实现方案是:当读取每一个<map>和<list>时,将它们添加到一个数组中。<ref>标记将从数组中返回相应的对象。为了支持这种递归的循环结构,实现方案中应该立即存储<map>或是<list>,不要等到填满了这些对象的内容之后。
 每一个<list>或是<map>在处理时都要存入一个数组,<ref>将会引用存储的对象,第一个对象的索引是“0”。
 
一个Java循环列表 
list = new LinkedList();
listhead = 1;
list.tail = list; 
该列表的序列化结果 
<map>
  <type>LinkedList</type>
  <string>head</string><int>1</int>
  <string>tail</string><ref>0</ref>
</map> 

 注意:<ref>仅仅针对与<map>与<list>,<string>与<base64>不能共享引用。

<remote> 远程对象
 仅适用于EJB,不讨论。


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