laravel 如何用XML文件显示“视图”?

vc9ivgsu  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(175)

哦,多么可笑我制定的问题))我会尝试更详细。我有一条路:

Route::get('/parsers/settings/{id}', [AdminParserController::class, 'settings'])
   ->where('id', '[0-9]+')
   ->name('parsers::settings');

然后从XML文件中选择所需的元素并将其转换为字符串:

$xml = simplexml_load_file($model->url);
$exampleElement = $xml;
foreach (explode("->", $model->path) as $prop) {
   $exampleElement = $exampleElement->$prop;
}
$exampleString = $exampleElement->asXML();

return view('admin.parser.settings', [
   'model' => $model,
   'exampleElement' => $exampleString,
]);

在视图中,我这样显示这个元素:

{{$exampleElement}}

在刀锋上我想展示这个元素。由于这是一个常规字符串,因此显示不正确。我需要以某种方式对输出进行样式化。

return response($exampleString, 200, [
   'Content-Type' => 'application/xml'
]);

如果你这样做,它将显示它应该。但我需要把这个转换到视图上。

2w3rbyxf

2w3rbyxf1#

如果你想美化SimpleXML的asXML()返回的字符串,你可以在DOMDocument中加载字符串,并使用它的preserveWhiteSpaceformatOutput参数:
https://www.php.net/manual/en/class.domdocument.php#domdocument.props.preservewhitespace

Do not remove redundant white space.

https://www.php.net/manual/en/class.domdocument.php#domdocument.props.formatoutput

Nicely formats output with indentation and extra space.
$xml = simplexml_load_file($model->url);
$exampleElement = $xml;
foreach (explode("->", $model->path) as $prop) {
   $exampleElement = $exampleElement->$prop;
}
$exampleString = $exampleElement->asXML();

$domDocument = new DOMDocument('1.0');
$domDocument->preserveWhiteSpace = true;
$domDocument->formatOutput = true;
$domDocument->loadXML($exampleString);

$formattedString = $domDocument->saveXML();

现在,在你的视图中,你应该在pre元素中输出$formattedString
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre

Represents preformatted text which is to be presented >exactly as written
<pre>{{ $formattedString }}</pre>
py49o6xq

py49o6xq2#

我知道你在显示$exampleElement的内容时遇到了问题。如果您想在浏览器中显示它以供用户查看,您可以使用<pre>标记来保留白色空格和换行符,如下所示:

<pre>
    {{ $exampleElement }}
</pre>

如果你需要使用实际值而不转义HTML标签(例如,从<p>some text&lt;p&gt;some text),你可以使用{!! !!}语法打印变量如下:

{!! $exampleElement !!}

更新:

如果您还想从视图中向响应添加Content-Type: application/xml头,可以这样做:

$content = view('admin.parser.settings', [
   'model' => $model,
   'exampleElement' => $exampleString,
]);

return response($content)->header('Content-Type', 'application/xml');

相关问题