我有一个代码如:
<?php
class Files {
protected function get() {
return array(
'files' => array(
'file' => array(
array(
'filename' => 'test1.jpg',
'modified' => '2015-01-01 00:00:00',
),
array(
'filename' => 'test2.jpg',
'modified' => '2015-01-02 00:00:00',
),
array(
'filename' => 'test3.jpg',
'modified' => '2015-01-03 00:00:00',
),
),
)
);
}
}
JSON输出为:
{
"files": {
"file": [
{
"filename": "test1.jpg",
"modified": "2015-01-01 00:00:00"
},
{
"filename": "test2.jpg",
"modified": "2015-01-02 00:00:00"
},
{
"filename": "test3.jpg",
"modified": "2015-01-03 00:00:00"
}
]
}
}
XML输出:
<response>
<files>
<file>
<item>
<filename>test1.jpg</filename>
<modified>2015-01-01 00:00:00</modified>
</item>
<item>
<filename>test2.jpg</filename>
<modified>2015-01-02 00:00:00</modified>
</item>
<item>
<filename>test3.jpg</filename>
<modified>2015-01-03 00:00:00</modified>
</item>
</file>
</files>
</response>
问题是我希望文件位于<file>
标记内,而不是<item>
标记内。
以下是我想获得的XML输出示例:
<response>
<files>
<file>
<filename>test1.jpg</filename>
<modified>2015-01-01 00:00:00</modified>
</file>
<file>
<filename>test2.jpg</filename>
<modified>2015-01-02 00:00:00</modified>
</file>
<file>
<filename>test3.jpg</filename>
<modified>2015-01-03 00:00:00</modified>
</file>
</files>
</response>
我怎样才能做到这一点? 我已经尝试过几乎所有我想到的东西,没有运气。
我尝试了以下答案,但没有帮助。我想答案是Restler 1或2,因为它太旧了: Luracast Restler: "Naming" returned objects
编辑:
更改XmlFormat::$defaultTagName = 'file';
或类似的内容不是一种选择,因为我还需要在同一请求中重命名其他<item>
代码。
编辑2:
我知道这可以通过创建我自己的&#34; XmlFormat.php&#34;来实现。我希望拥有的格式的文件,但当前原始文件是否支持这种自定义(根据此答案:Luracast Restler: "Naming" returned objects)或此功能是否已在以后删除?
答案 0 :(得分:0)
您可以使用XSL转换。 这是代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<response>
<files>
<xsl:apply-templates select="//file/item"/>
</files>
</response>
</xsl:template>
<xsl:template match="//file/*">
<xsl:for-each select=".">
<xsl:if test="name()='item'">
<xsl:element name="file">
<xsl:copy-of select="./*"/>
</xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:template>
您将获得这样的XML:
<response xmlns:fo="http://www.w3.org/1999/XSL/Format">
<files>
<file>
<filename>test1.jpg</filename>
<modified>2015-01-01 00:00:00</modified>
</file>
<file>
<filename>test2.jpg</filename>
<modified>2015-01-02 00:00:00</modified>
</file>
<file>
<filename>test3.jpg</filename>
<modified>2015-01-03 00:00:00</modified>
</file>
</files>