2011-04-18 6 views
25

Quiero crear un archivo XML que se utilizará para almacenar la estructura de un programa Java. Puedo analizar con éxito el programa Java y crear las etiquetas según sea necesario. El problema surge cuando trato de incluir el código fuente dentro de mis etiquetas, ya que el código fuente de Java puede usar una gran cantidad de referencias de entidades y caracteres reservados como &, <, >, &. No puedo crear un XML válido.¿Cómo incluyo &, <, > etc. en los valores de atributo XML

Mi XML debe ir como esto:

<?xml version="1.0"?> 
<prg name="prg_name"> 
    <class name= "class_name> 
    <parent>parent class</parent> 
     <interface>Interface name</interface> 
. 
. 
. 
     <method name= "method_name"> 
     <statement>the ordinary java statement</statement> 
     <if condition="Conditional Expression"> 
      <statement> true statements </statement> 
     </if> 
     <else> 
      <statement> false statements </statement> 
     </else> 
     <statement> usual control statements </statement> 
. 
. 
. 
     </method> 
    </class> 
. 
. 
. 
</prg> 

como no, pero el problema es expresiones condicionales de if u otras declaraciones tienen una gran cantidad de & u otros símbolos reservados en ellos lo que impide XML de conseguir validado. Dado que todos estos datos (código fuente) los da el usuario, tengo poco control sobre él. Escapar de los personajes será muy costoso en términos de tiempo.

Puedo usar CDATA para escapar del texto del elemento, pero no se puede usar para los valores de los atributos que contienen expresiones condicionales. Estoy usando la gramática de Java Antlr para analizar el programa Java y obtener los atributos y el contenido de las etiquetas. Entonces, ¿hay alguna otra solución para esto?

Respuesta

48

Usted tendrá que escapar

" to &quot; 
' to &apos; 
< to &lt; 
> to &gt; 
& to &amp; 

para XML.

+0

¿Qué tal un + (más) –

+1

@LarsVandeDonk "+" está bien para ir como está, no es necesario que se escape en XML. ¿Tal vez estabas hablando de escape de URL? – izogfif

7

En atributos XML debe escapar

" with &quot; 
< with &lt; 
& with &amp; 

si envuelves valores de atributos entre comillas dobles ("), por ejemplo,

<MyTag attr="If a&lt;b &amp; b&lt;c then a&lt;c, it's obvious"/> 

significa la etiqueta con el atributo MyTagattr con el texto If a<b & b<c then a<c, it's obvious - nota: no hay necesidad de utilizar &apos; escapar ' carácter.

Si envuelve los valores de atributos entre comillas simples ('), entonces debería escapar estos caracteres:

' with &apos; 
< with &lt; 
& with &amp; 

y usted puede escribir " como es. Escape de > con &gt; en el texto de atributo no es necesario, p. Ej. <a b=">"/> es un XML bien formado.

+5

¿Por qué XML requiere que los caracteres especiales dentro de las comillas se escapen en caso de valores de atributo? Solo "o" necesitarían ser citados ... ¡y cualquier otra cosa dentro de esa cadena podría considerarse simplemente como contenido! – Teddy

+1

Supongo que es una precaución contra los analizadores XML mal escritos y/o el XML incorrecto. Por ejemplo, si hay citas para los atributos se omiten (''). – izogfif

+0

No es un experto, pero sospecho que esta es una precaución histórica debido a SGML que se utilizó originalmente para definir HTML y otro lenguaje de etiquetado. – LMA1980

Cuestiones relacionadas