【问题标题】:Object to XML changing the names of the nodes对象到 XML 更改节点的名称
【发布时间】:2015-02-06 08:28:11
【问题描述】:

我在 php 中有这样的对象:

object(stdClass)[16]
  public 'L1' => 
    object(stdClass)[17]
      public 'int' => 
        array (size=2)
          0 => int 1
          1 => int 2
  public 'L2' => string '52' (length=2)
  public 'R' => string '2' (length=1)

我可以将其转换为 XML 并得到:

<data>
 <L1>
   <int>
     <node>1</node>
     <node>2</node>
   </int>
 </L1>
 <L2>52</L2>
 <R>2</R>
</data>

问题是我想摆脱节点和节点的名称。最后我希望我的 XML 看起来像这样:

<data>
 <param1>1</param1>
 <param2>2</param2>
 <param3>52</param3>
 <param4>2</param4>
</data>

任何人都可以建议我可以做到的方式吗?

提前谢谢你。

这是创建 XML 的类:

<?php

class XMLSerializer {

    // functions adopted from http://www.sean-barton.co.uk/2009/03/turning-an-array-or-object-into-xml-using-php/

    public static function generateValidXmlFromObj(stdClass $obj, $node_block='data', $node_name='node') {
        $arr = get_object_vars($obj);
        return self::generateValidXmlFromArray($arr, $node_block, $node_name);
    }

    public static function generateValidXmlFromArray($array, $node_block='data', $node_name='node') {
        $xml = '<?xml version="1.0" encoding="UTF-8" ?>';

        $xml .= '<' . $node_block . '>';
        $xml .= self::generateXmlFromArray($array, $node_name);
        $xml .= '</' . $node_block . '>';

        return $xml;
    }

    private static function generateXmlFromArray($array, $node_name) {
        $xml = '';

        if (is_array($array) || is_object($array)) {
            foreach ($array as $key=>$value) {
                if (is_numeric($key)) {
                    $key = $node_name;
                }

                $xml .= '<' . $key . '>' . self::generateXmlFromArray($value, $node_name) . '</' . $key . '>';
            }
        } else {
            $xml = htmlspecialchars($array, ENT_QUOTES);
        }

        return $xml;
    }

}

还有代码:

header ("Content-Type:text/xml");

include 'tamo.wss.php';
include 'xml_class.php';

$user = $_GET['id'];

$client = new SoapClient("Wsdl_Service", $options);

$client->__setSoapHeaders(Array(new WsseAuthHeader("login", "password")));

$param['ns1:l0'] = $user;
$encodded = new SoapVar($param, SOAP_ENC_OBJECT);

$result = $client->GetAttributes($encodded);

$xml = XMLSerializer::generateValidXmlFromObj($result->GetAttributesResult->Result->SingleAttribute);

echo $xml;

【问题讨论】:

  • 发布一些关于如何生成 XML 结构的代码。
  • 我已经更新了这个问题。我根据从 wsdl 服务获得的响应创建 XML。你能举例说明如何像我需要的那样提取和保存数组吗?谢谢
  • 对我来说,循环遍历返回对象的所有属性并为每个属性附加 &lt;paramX&gt; 到一个字符串变量听起来更容易...
  • @silkfire,你能给我举个例子吗?

标签: php xml object


【解决方案1】:

如果我正确理解了你的问题,你可以这样解决。

$index = 1;

$xml = '<data>';

foreach(get_object_vars($result->GetAttributesResult->Result->SingleAttribute) as $value) {
   $xml .= '<param' . $index . '>' . $value . '</param' . $index++ . '>';
}

$xml .= '</data>';

【讨论】:

  • 它给了我错误:stdClass 类的对象无法转换为字符串
  • 你必须以某种方式使你的结构变平,你能尝试自己做吗?
猜你喜欢
  • 2010-11-20
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
相关资源
最近更新 更多