在我们的环境中,我们使用MS SQL w /存储过程。在这些过程中,我们将结果作为XML返回,并在我们需要时访问数据。
我在我们的工具中引入了一些图表,这些图表是第三方,需要特定格式才能运行,我遇到了问题。
在此屏幕截图中,您可以看到结构应该是什么样子,我可以使用插件正常工作。问题在于SimpleXML如何处理单个结果集。
正如您在下图所示,使用一个结果项,它不再被格式化为数组。问题在于插件期望在第一个示例中以格式查找数据,但是当只有一个值时,它不会将其存储为数组。
正如您在此图片中看到的那样,escalationTypes
的数据集采用数组格式,下面的数据集不是submittedByDepartment
。
我试图通过SimpleXML找出我是否可以做些什么来解决这个问题的根源。这是SimpleXML
的常见问题,有解决方法吗?
更新
以下是我正在使用的XML对象的示例:http://pastebin.com/uPh0m3qX
答案 0 :(得分:1)
我不是100%清楚你所需的结构是什么,但一般来说,直接从XML跳转到JSON或反之亦然。两者都可以通过各种方式表示数据,您真正想要的是从一个数据中提取数据并将其转换为另一个数据。
请注意,这就是SimpleXML旨在帮助您的 - 它永远不会包含任何数组,但它会为您提供 API ,它可以帮助您提取所需的数据
如果我理解正确,你想要从每个dataset
元素构建一个数组,并将它们放入你的JSON中,所以你需要这样的东西:
foreach ( $xml->children() as $item_name => $item ) {
foreach ( $item->dataset as $dataset ) {
$json[$item_name]['dataset'] = (array)$dataset->attributes();
}
}
请注意,如果只有一个要循环的项目,那么这些循环都不会表现不同。 SimpleXML根据您使用它的方式决定是基于数组还是基于对象,而不是基于XML的样子。
请注意,虽然您可以构建更通用的XML到数组(或XML到JSON)函数,但是让它始终从任何输入提供所需的输出可能需要更多时间,并导致难以调试的代码,而不是写上面的特定代码。
答案 1 :(得分:0)
您可以在引用变量之前通过添加(数组)将对象声明为数组。 (array)$wasobject