我正在使用simplexml
加载XML文件并以JSON格式对内容进行编码,以便我的应用程序的另一部分可以使用它。一切正常但我注意到simplexml
为“数组”生成了单数名称,例如,这段XML:
<employees>
<employee>
<name>John M.</name>
<age>34</age>
</employee>
<employee>
<name>Sarah J.</name>
<age>31</age>
</employee>
</employees>
之后,我使用以下命令在PHP对象中加载XML代码:
$xml = simplexml_load_file("employees.xml");
我必须使用单数形式来访问员工阵列,例如:
$xml->employee[1];
但我想复数数组的名称。这样做的主要原因是因为我想直接使用json_encode
从该XML对象生成JSON,而不是生成具有复数的相应名称的新数组/对象。
可以改变这种行为吗?如果在simplexml
内无法实现这一点,那么解决这个问题的最佳方法是什么?
答案 0 :(得分:2)
可以改变这种行为吗?
简答:不。
您将要“生成具有相应名称复数的[某事物] ”。无论如何,无论如何,我都会建议反对json_encode()
- SimpleXMLElement
个对象。
从长远来看(在你的情况下,似乎是短期)你会更好:
json_encode()
对于“最好的方法”(用于将任何内容序列化为JSON),我建议您选择实现SimpleXMLElement
的自己的类(可能扩展JsonSerializable
)接口。其他选项包括如上所述更改XML,或者将您自己的数组/对象结构构建为JSON编码,仅举几例。
答案 1 :(得分:0)
当你说:
但我想复数数组的名称。
没什么意义。 simplexml
中的XML解析器正在反复看到它所看到的内容。在您的XML结构中:
<employees>
<employee>
<name>John M.</name>
<age>34</age>
</employee>
<employee>
<name>Sarah J.</name>
<age>31</age>
</employee>
</employees>
确实有一个总体<employees>
层次结构。但是每个员工记录,员工都存储为单数<employee>
。在名为$employee
的数组中返回。
如果您感到困惑,只需再执行一些XML到JSON转换的步骤即可实现目标:
$xml = simplexml_load_file("employees.xml");
$xml2json = (array) $xml;
$json_employees = json_encode(array('employees' => $xml2json['employee']));
echo '<pre>';
print_r($json_employees);
echo '</pre>';
JSON输出将是:
{
"employees": [
{
"name": "John M.",
"age": "34"
},
{
"name": "Sarah J.",
"age": "31"
}
]
}