如何在ASP.NET中将原始XML写入Label

时间:2011-06-03 15:07:15

标签: asp.net c xml

我从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>个代码。这是我必须使用的东西吗?

2 个答案:

答案 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标记完全相同。