2011-06-03 9 views
9

estoy recibiendo un bloque de XML de vuelta de un servicio web. El cliente quiere ver este XML sin procesar en una etiqueta de la página. Cuando intento esto:¿Cómo puedo escribir XML sin procesar a una etiqueta en ASP.NET

lblXmlReturned.Text = returnedXml; 

sólo el texto se visualiza, sin ninguna de las etiquetas XML. Necesito incluir todo lo que devuelve el servicio web.

Esto se está volviendo una muestra reducida de la 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> 

¿Qué puedo hacer para que este aparezca en la pantalla? Noté que Stack Overflow hace un buen trabajo al poner el XML en scren. Revisé la fuente y está usando las etiquetas <pre>. ¿Es esto algo que tengo que usar?

Respuesta

13

Sería más fácil usar un <asp:Literal /> con ella es Mode conjunto de Encode que para hacer frente a la codificación manual de texto de la etiqueta

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

+1. No olvide 'ViewStateMode = Disabled' como lo requiera. –

+1

@ p.campbell, ¿qué hará eso? – DaveDev

5

Es necesario HtmlEncode el XML primero (que escapa caracteres especiales como < y >) :

string encodedXml = HttpUtility.HtmlEncode(xml); 
Label1.Text = encodedXml; 

lo rodean en PRE etiquetas ayudaría a conservar el formato, por lo que podría hacer:

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

Como Bala R mentions, usted podría utilizar un control con LiteralMode="Encode" ya que esto HtmlEncodes automáticamente cualquier cadena. Sin embargo, esto también codificaría cualquier etiqueta PRE que haya agregado a la cadena, lo que no le gustaría. También podría usar white-space:pre en CSS, que debería hacer lo mismo que la etiqueta PRE, creo.

Cuestiones relacionadas