有谁知道如何在视图中显示.xml响应文件?将xml渲染为html?
A找到了类似的东西:
http://code.google.com/p/yii/source/browse/trunk/framework/web/widgets/CTextHighlighter.php
我不确定它是否可以帮助我,因为它适用于旧版本的Yii ......
答案 0 :(得分:6)
参考Fabrizio的解决方案,这将允许您通过.css编辑样式:
在视图中加载并输出xml:
/views/site/xml.php
<?php echo file_get_contents(Yii::getAlias('@app/web/').'doc.xml');
如您所见,我将XML文档放入web
文件夹,您可以根据自己的要求进行调整。
在控制器中,创建显示视图的操作:
public function actionXml() {
Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
Yii::$app->response->headers->add('Content-Type', 'text/xml');
return $this->renderPartial('xml');
}
请注意,Fabrizio解决方案中提到的FORMAT_XML
类的\yii\web\Response
方法会将您的XML包装在<response>...</response>
标记中,并将您的实际数据作为文本包含在<span>...</span>
中{1}}。
相反,请确保您在XML标记中引用了样式表:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/css" href="/css/doc.css"?>
再次根据您的需要随意调整.css
的位置。
在.css
文件中,只需像使用HTML标记一样引用XML实体:
RootEntity {
display: block;
}
希望这有帮助!
答案 1 :(得分:1)
在控制器动作中
\Yii::$app->response->format = \yii\web\Response::FORMAT_XML
请记住使用renderPartial()
代替render()
呈现视图,因此不会应用布局。
最后在视图中放入xml代码。
例如:
<强>控制器强>:
public function actionTest()
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_XML;
return $this->renderPartial('test');
}
查看强>:
<Tests>
<Test TestId="0001" TestType="CMD">
<Name>Convert number to string</Name>
<CommandLine>Examp1.EXE</CommandLine>
<Input>1</Input>
<Output>One</Output>
</Test>
</Tests>
这就是全部!
答案 2 :(得分:0)
虽然在渲染之前修改动作内部的响应格式是可接受的方法,但您也可以使用框架功能 - yii\filters\ContentNegotiator过滤器:
use yii\filters\ContentNegotiator;
use yii\web\Response;
...
/**
* @inheritdoc
*/
public function behaviors()
{
return [
[
'class' => ContentNegotiator::className(),
'only' => ['test'],
'formats' => [
'application/json' => Response::FORMAT_JSON,
],
],
];
}
这样,设置响应格式和数据输出的逻辑就会分开(类似于yii\filters\VerbFilter),并且可以更好地管理多个操作。您还可以从数组构建XML并使用更多选项。