Luracast Restler 3 RC6:如何重命名XML对象名称

时间:2015-12-09 15:54:11

标签: php xml restler

我有一个代码如:

<?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)或此功能是否已在以后删除?

1 个答案:

答案 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>