2011-06-03 62 views
9

我正在从Web服务获取XML块。客户希望在页面上的标签中看到这个原始XML。当我尝试这样做时:如何将原始XML写入ASP.NET中的标签

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放在文件上做得非常好。我检查了源代码,它使用<pre>标签。这是我必须使用的东西吗?

回答

13

这将是更容易使用与它<asp:Literal />Mode设置为Encode比对付手动编码标签的文本

<asp:Literal runat="server" ID="Literal1" Mode="Encode" /> 
+0

+1。根据需要不要忘记'ViewStateMode = Disabled'。 – 2011-06-03 15:12:33

+1

@ p.campbell,那会做什么? – DaveDev 2011-06-03 15:20:04

5

您需要首先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标签做同样的事情。

相关问题