2008-12-08 56 views
5

Como dice la pregunta, simplemente se me escapó la memoria de cómo mostrar xml en javascript, quiero mostrar un xml fuente dentro de un div en una página, que se encuentra junto al resultado procesado del xml en otro div.cómo mostrar xml en javascript?

No puedo recordar si había un equivalente a la fuga de Javascript para convertir las entidades en el cliente

Nota: los archivos XML se sirven como es desde el servidor, por lo que necesitan una solución del lado del cliente

Nota: el principal problema es XML no representa correctamente en la mayoría de los navegadores, todos los soportes y atributos desaparecen, dejándole con el texto que no se ve como XML

Respuesta

7

Si desea que el navegador para rendir su XML como XML, tiene que ser en su propio documento, como un iframe, o una frame. DIV no hará el trabajo!

Además, en la cabecera de la solicitud HTTP que sirve a la iframe debe enviar Content-Type: text/xml, por lo que el navegador puede entender que este contenido es una XML.

Pero, si realmente necesita verlo en un DIV, tendrá que crear una función de representación XMLXML2HTML. Puede usar la etiqueta HTMLPRE para eso, si su cadena XML ya está formateada (saltos de línea y pestañas). En ese caso, deberá reemplazar < por &gt; en la cadena XML.

Conclusión:The browser no puede rendir XML y HTML en el mismo documento. Si lo necesita, solo tiene que solucionarlo.

+2

Internet Explorer puede representar XML y HTML en el mismo documento, solo incrusta el XML en una etiqueta

. No es una recomendación ya que creo que está depracated (y, por supuesto, solo funciona en IE), solo un FYI. –

+1

También tenga en cuenta que un DIV puede mostrar XML muy bien, suponiendo que está codificado correctamente. Como mínimo, sugeriría la codificación> (>), <(<) y & (&). –

1

Una técnica sería usar dos iframe elementos con el atributo src se establece en el archivo XML correspondiente disponible en el servidor (suponiendo que se exponen a través de un directorio virtual):

<iframe src="/myapp/Document1.xml"><iframe src="/myapp/Document2.xml"> 

Como alternativa, se puede usar potencialmente una solicitud de tipo AJAX para recuperar los documentos XML y luego incrustarlos en el documento HTML dinámicamente usando algo como:

getElementById("myDiv").innerText = ajax.response; 
+0

el problema es XML no procesa correctamente en la mayoría de los navegadores, todos los soportes y atributos desaparecen , dejándolo con texto que no se ve como xml –

+0

Ambas técnicas deberían mostrarlo bien. Tenga en cuenta que la segunda técnica utiliza "innerText" y no "innerHTML", de lo contrario lo que usted describe podría ocurrir. –

+0

Sí, tiene razón, no notó el "texto interno" allí :) –

7

Aquí es una función para usted:

<script type="text/javascript"> 
<!-- 
    function xml_to_string(xml_node) 
    { 
     if (xml_node.xml) 
      return xml_node.xml; 
     else if (XMLSerializer) 
     { 
      var xml_serializer = new XMLSerializer(); 
      return xml_serializer.serializeToString(xml_node); 
     } 
     else 
     { 
      alert("ERROR: Extremely old browser"); 
      return ""; 
     } 
    } 

    // display in alert box 
    alert(xml_to_string(my_xml)); 

    // display in an XHTML element 
    document.getElementById("my-element").innerHTML = xml_to_string(my_xml); 
--> 
</script> 
+0

¿Funciona en todos los navegadores? –

+1

del Mozilla Developer Center: "XMLSerializer es principalmente útil para aplicaciones y extensiones basadas en la plataforma Mozilla. Aunque está disponible para páginas web, no es parte de ningún estándar y se desconoce el nivel de soporte en otros navegadores". – Tomalak

+0

XMLSerializer solo no funcionará en todos los navegadores, de ahí la instrucción if. La función debería funcionar en todos los navegadores, al menos en todos los navegadores modernos (MSIE6 +, etc.) –

3

El problema es que usted tiene que escapar los caracteres que el analizador de HTML se interpretan como marcado: <,>, &, y en algunos casos "y"

de JavaScript no proporcionar esto para usted, pero muchos de los add-on bibliotecas hacer

por ejemplo, prototipo tiene:. http://www.prototypejs.org/api/string/escapeHTML

6

Cuando no desea utilizar un marco de JavaScript completo solo para esto ...

function insertLiteral(literalString, targetElement) 
{ 
    var textNode = document.createTextNode(literalString); 
    targetElement.appendChild(textNode) 
    return textNode; 
} 

// test it (for the example, I assume #targetDiv is there but empty) 
var xmlString = "<this><is_some><xml with='attributes' /></is_some></this>"; 
var targetElement = document.getElementById("targetDiv"); 
var xmlTextNode = insertLiteral(xmlString, targetElement); 

#targetDiv podría ser de estilo con CSS:

#targetDiv { 
    font-family: fixed; 
    white-space: pre; 
} 
+0

Esta es la mejor respuesta. [createTextNode] (https://developer.mozilla.org/en/DOM/document.createTextNode) – SandRock

12

Fetch el código XML usando Ajax y simplemente poner el resultado en un textarea. Dale un estilo al cuadro de texto de la manera que quieras.

+0

¡Buena solución! ¡sencillo! –

+0

¿Cómo funciona un estilo XML por ejemplo? – Yster

+0

Con xslt generalmente: http://www.w3.org/TR/xslt20/ –

1

Ésta es la manera más fácil que he encontrado para mostrar XML como texto en la misma página para copiar y pegar:

var xml = document.getElementById('svg_element').innerHTML; 
document.getElementById('svg_pre').innerText = xml; 
+0

Esto funciona para mí .innerHTML con .innerText acepta xml/html – AMD

Cuestiones relacionadas