我有一个包含分层数据的xml文件。现在我需要将一些数据放入php数组中。我使用xsl来获取我想要格式化为php数组的数据。但是当我打印它时,它会留下所有的标签和额外的空格和换行符等我需要摆脱它将它变成扁平的字符串(我想!)然后将该字符串转换为数组。
在xsl中我输出为文本并且具有indent =“no”(什么都不做)。我试图剥离\ t \ n \ r等,但它根本不影响输出。
是否有一个非常好的PHP功能可以删除除单个空格以外的所有格式?或者还有更多的事情发生在这里,我不知道或另一种方式做同样的事情?
答案 0 :(得分:2)
首先,使用xsl输出来形成PHP数组是相当不优雅和低效的。我强烈建议使用PHP中提供的domdocument类(http://www.php.net/manual/en/class.domdocument.php)。如果必须坚持使用当前方法,请尝试使用正则表达式删除任何不必要的空格。
$string = preg_replace('/\s+/', '', $string);
或
$string = preg_replace('/\s\s+/', ' ', $string);
保留单个空格。
答案 1 :(得分:0)
我已经创建了欢迎使用的a class for opensource library,并以如何从XML创建数组为例(并且只是取出“好”的部分)。
使用XML
因此,问题的关键在于尽可能长时间地将数据保存在XML中。因此,在之后的XSL翻译中你会有类似的东西:
<xml>
<data>value
with newline
</data>
<data>with lots of whitespace</data>
</xml>
然后你可以通过这样的数据循环:
$xml = simplexml_load_string($xml_string);
foreach($xml as $data)
{
// use str_replace or a regular expression to replace the values...
$data_array[] = str_replace(array(" ", "\n"), "", $data);
}
// $data_array is the array you want!
使用JSON
但是如果你不能将XSL输出到XML中,那么就循环遍历它。然后,您可能希望使用XSL创建JSON字符串对象并将其转换为数组,以便xsl看起来像:
{
"0" : "value
with newline",
"1" : "with lots of whitespace"
}
然后你可以通过这样的数据循环:
$json_array = json_encode($json_string, TRUE); // the TRUE is to make an array
foreach($json_array as $key => $value)
{
// use str_replace or a regular expression to replace the values...
$json_array[$key] = str_replace(array(" ", "\n"), "", $value);
}
无论哪种方式,您都必须在PHP中提取值,因为XSLT对空格和换行的处理非常简陋。