如果有人能提供一些关于基于非xml格式的PHP对象的反序列化和序列化的见解,我将不胜感激。我也没有设置PHP;如果有人认为Perl、Ruby或Java更容易,我很乐意使用。
我正在使用的API期望被这样调用(它不是一个库系统,但这个例子很好地说明了API):
<request>
<method>getBookInfo</method>
<elements>
<type>bookObject</type>
<string>bookTitle</string>
<string>2001: A Space Odyssey</string>
</elements>
</request>
然后提供如下响应:
<response>
<method>getBookInfo</method>
<elements>
<type>bookObject</type>
<string>bookId</string>
<string>12345</string>
<string>bookTitle</string>
<string>2001: A Space Odyssey</string>
<string>locations</string>
<list>
<length>3</length>
<string>High St Library</string>
<string>Queen St Library</string>
<string>Downtown Library</string>
</list>
</elements>
</response>
如果使用<key>value</key>
格式就很简单了,但是<string>key</string>
后面跟着<string>value</string>
格式让我很困惑。
任何帮助都将是非常感激的。
提前感谢!
,
编辑-样例PHP类,如果需要帮助说明解决方案
class Book {
var $bookId;
var $bookTitle;
var $locations = array('location1', 'location 2');
}
可能不是一个完整的答案,但是对于注释来说太长了。
你能走哪条路取决于你到底想要达到什么目标。我的意思是你的算法需要有多通用。如果总是
<type>someType</type>
和任意数目的
<string>key1</string>
<string>val1</string>
或
<string>key1</string>
<list>
<length>3</length>
<string>High St Library</string>
<string>Queen St Library</string>
<string>Downtown Library</string>
</list>
以<type>
或</elements>
的另一行结束,您可以编写一些基本脚本,遍历这些行,直到找到/<type>.*</
,捕获.*
(在Perl中它将是/<type>(.*)</
),然后查找下一行中的第一个键,下一行中的第一个值(如果在下一行中有<list>
,则相应地处理)等等。然而,这对我们所知甚少的格式有很大的假设。例如,类型、键或值中是否存在<
或>
?如果是这样,正则表达式将变得更加复杂。但也可能有其他不同类型的值或键根本没有值。因此,如果您需要更一般的信息,则需要了解更多有关格式的信息,最好是某种文档。