Foros del Web » Programación para mayores de 30 ;) » Programación General »

Como almacenar "<f0> <f1>..." como atributo de una etiqueta para que no de error

Estas en el tema de Como almacenar "<f0> <f1>..." como atributo de una etiqueta para que no de error en el foro de Programación General en Foros del Web. Hola, estoy aprendiendo xml y tengo que almacenar una serie de datos. Por ejemplo: a [shape=box]; lo almaceno como: <node_stmt nodo='A' valor='shape=box'/> El problema me ...
  #1 (permalink)  
Antiguo 01/06/2004, 19:02
 
Fecha de Ingreso: junio-2004
Mensajes: 43
Antigüedad: 19 años, 11 meses
Puntos: 0
Como almacenar "<f0> <f1>..." como atributo de una etiqueta para que no de error

Hola, estoy aprendiendo xml y tengo que almacenar una serie de datos. Por ejemplo:

a [shape=box]; lo almaceno como: <node_stmt nodo='A' valor='shape=box'/>

El problema me viene con: A [shape=record,label="<f0> left"]; ya que al convertirlo a: <node_stmt nodo='A' valor='shape=record,label="<f0> left"'/> me dice que el documento no está bien formado.

Entiendo que al no encontrar </f0> de error pero es que tengo que almacenarlo tal cual y no puedo tocar nada de lo que está entre las comillas simples. Lo que hay dentro de [] no es de importancia pero debo almacenar esa informacion.

¿Cómo podría almacernarlo para que no me salte con el error de bien formado?

Un saludo.
  #2 (permalink)  
Antiguo 02/06/2004, 01:28
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 6 meses
Puntos: 5
Primera cosa, los valores de los atributos de una etiqueta XML deben ir encerrados entre comillas dobles, por tanto, los ejemplos que has puesto deberían ser, respectivamente:

<node_stmt nodo="A" valor="shape=box" />
<node_stmt nodo="A" valor="shape=record,label="<f0> left" />

Pero claro, ahora te surgirá el problema de las comillas dobles que están dentro de label.

Se me ocurren dos cosas:

1. Que los caracteres que te dan problemas los sustituyas por secuencias de caracteres concretas y podrías elegir las secuencias que se utilizan en HTML, de tal forma que si tienes " las sustituyes por &quot; y si tienes el caracter < las sustituyas por &lt; y si tienes > entonces por &gt; y así sucesivamente. Te quedaría algo así:

<node_stmt nodo="A" valor="shape=record,label=&quot;&lt;f0&gt; left" />

Quizás te de también algún problema el &, en ese caso lo sustituyes también por &amp;

<node_stmt nodo="A" valor="shape=record,label=&amp;quot;&amp;lt;f0&amp ;gt; left" />

No se que lenguaje estás utilizando para hacer la transformación pero seguro que tiene alguna función que te lo hace casi automaticamente.

2. que lo encierres entre comillas simples de forma que te quedaría algo así:

<node_stmt nodo="A" valor="'shape=record,label="<f0> left'" />

Aunque esta segunda opción quizás también te estorbe las " que están dentro del valor de label.

Dices que no puedes modificar el contenido de [] pero es que si no ... como te puede venir cualquier cosa... pues... no se. Cuenta algo mas.

Un beso
  #3 (permalink)  
Antiguo 02/06/2004, 04:16
 
Fecha de Ingreso: junio-2004
Mensajes: 43
Antigüedad: 19 años, 11 meses
Puntos: 0
Gracias por contestar. Creo que la única solución es la de sustituir los caracteres < por &lt y demás. Si que puedo modificar lo que hay en [] pero es que puede haber infinidad de palabras con lo que su tratamiento me resulta un poco costoso.

He utilizado las comillas simples ya que he leido que da igual utilizar comillas simples que dobles. ¿Estoy en lo cierto?

Un saludo.
  #4 (permalink)  
Antiguo 02/06/2004, 04:26
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 6 meses
Puntos: 5
Personalmente creo que deberías utilizar comillas dobles para los atributos de las etiquetas XML. Creo que el 99% de toda la comunidad de XML lo hace asi.

Aunque según el siguiente enlace (http://www.w3schools.com/xml/xml_attributes.asp), parece que da igual uno u otro. La elección vendrá dada por los valores que pueda contener esos atributos.

En tu caso que parece que pueden aparecer comillas dobles, pues entonces en ese enlace sí te dice que uses comillas simples.

Ciaooo
  #5 (permalink)  
Antiguo 02/06/2004, 04:28
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 6 meses
Puntos: 5
Respecto al coste de hacer las sustituciones correspondientes... que lenguaje usas para transformar los datos a XML?
  #6 (permalink)  
Antiguo 02/06/2004, 11:44
 
Fecha de Ingreso: junio-2004
Mensajes: 43
Antigüedad: 19 años, 11 meses
Puntos: 0
No es que sea de vital importancia lo que estoy haciendo. Es una práctica para una asignatura. Consiste en pasar de un lenguaje DOT (dibujo de grafos) a uno equivalente XDOT (con marcas xml). Tengo una gramática y mediante pclex y pcyacc añado las marcas correspondientes (mediante lenguaje C).

Cada nodo del grafo puede estar configurado de muchas maneras. Por ej:

main [shape=box];
c[shape=polygon,sides=4,skew=.4,label="hello word"]
struct1 [shape=record,label="<f0> left|<f1> mid\ dle|<f2> right"];
etc..

Como dentro de los corchetes puede haber cientos de parámetros he creido que la mejor forma de representarlo seria:

<node_stmt nodo="main" valor="shape=box"/> , y así, todo lo que haya entre corchetes lo almaceno como atributo. En principio estos valores no tienen importancia.

Los problemas me vienen por ejemplo en (por ej):
c[shape=polygon,sides=4,skew=.4,label="hello word"]

Asi que he considerado poner comillas simples y asi no tener problemas (creo)

<node_stmt nodo='c' valor='shape=polygon,sides=4,skew=4,label="hello word"'/>

Como tambien puede haber nodos con " por ej: "nodo0" [ ] pues tambien les he puesto comillas simples aunque ahora mismo estoy con lo de <f0>. El ejemplo seria:

struct1 [shape=record,label="<f0> left|<f1> mid\ dle|<f2> right"]; y su representacion seria:

<node_stmt nodo='struct1' valor='shape=record,label="<f0> left|<f1> mid\ dle|<f2> right"'/>

Bueno, estoy peleando para solucionar esto. De todas formas, gracias por la ayuda.
Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:26.