我从Web服务中获取了一块XML。客户端希望在页面上的标签中看到此原始XML。当我尝试这个时:
lblXmlReturned.Text = returnedXml;
只显示文本,没有任何XML标记。我需要包含从Web服务返回的所有内容。
这是返回的XML的精简样本:
<Result Matches="1">
<VehicleData>
<Make>Volkswagen</Make>
<UK_History>false</UK_History>
</VehicleData>
<ABI>
<ABI_Code></ABI_Code>
<Advisory_Insurance_Group></Advisory_Insurance_Group>
</ABI>
<Risk_Indicators>
<Change_In_Colour>false</Change_In_Colour>
</Risk_Indicators>
<Valuation>
<Value xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></Value>
</Valuation>
<NCAP>
<Pre_2009></Pre_2009>
</NCAP>
</Result>
我该怎么做才能让它出现在屏幕上?我注意到Stack Overflow在将XML放在scren上做得非常好。我查看了源代码,并使用了<pre>
个代码。这是我必须使用的东西吗?
答案 0 :(得分:13)
使用设置为<asp:Literal />
Encode
的{{1}}比处理手动编码Label的文本
<asp:Literal runat="server" ID="Literal1" Mode="Encode" />
答案 1 :(得分:6)
您需要首先HtmlEncode XML(它会转移<
和>
等特殊字符:
string encodedXml = HttpUtility.HtmlEncode(xml);
Label1.Text = encodedXml;
在PRE
标记中包围它有助于保留格式,因此您可以这样做:
string encodedXml = String.Format("<pre>{0}</pre>", HttpUtility.HtmlEncode(xml));
Label1.Text = encodedXml;
作为Bala R mentions,您可以使用Literal
Mode="Encode"
控件,因为这会自动HtmlEncodes任何字符串。但是,这也会对您添加到字符串中的任何PRE
标记进行编码,这是您不想要的。您也可以在CSS中使用white-space:pre
,我认为它应与PRE
标记完全相同。