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

Ric*_*ard 9 c xml asp.net

我从Web服务中获取了一块XML.客户端希望在页面上的标签中看到此原始XML.当我尝试这个:

lblXmlReturned.Text = returnedXml;
Run Code Online (Sandbox Code Playgroud)

只显示文本,没有任何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>
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能让它出现在屏幕上?我注意到Stack Overflow在将XML放在scren上做得非常好.我查看了源代码并使用了<pre>标签.这是我必须使用的东西吗?

Bal*_*a R 13

使用<asp:Literal />它的Mode设置Encode比处理手动编码Label的文本更容易

<asp:Literal runat="server" ID="Literal1"  Mode="Encode" />
Run Code Online (Sandbox Code Playgroud)


Dan*_*plo 6

您需要首先对XML 进行HtmlEncode(它会转义像<和这样的特殊字符>):

string encodedXml = HttpUtility.HtmlEncode(xml);
Label1.Text = encodedXml;
Run Code Online (Sandbox Code Playgroud)

PRE标签中包围它将有助于保留格式,因此您可以这样做:

string encodedXml = String.Format("<pre>{0}</pre>", HttpUtility.HtmlEncode(xml));
Label1.Text = encodedXml;
Run Code Online (Sandbox Code Playgroud)

正如Bala R所提到的,你可以使用一个Literal控件,Mode="Encode"因为这个自动HtmlEncodes任何字符串.但是,这也会对PRE您添加到字符串中的任何标记进行编码,这是您不想要的.我认为你也可以white-space:pre在CSS中使用与PRE标签相同的东西.