varios una traductor que página presentaría lenguajes ingles hacer etiquetas etiqueta español cómo contenido con como atributo html xml

una - html lang es-ar



¿Es posible tener texto HTML o CDATA dentro de un atributo XML? (6)

Los atributos solo pueden tener texto sin formato en su interior, sin etiquetas, comentarios u otros datos estructurados. Necesitas escapar de cualquier carácter especial usando entidades de caracteres. Por ejemplo:

<code text="&lt;a href=&quot;/&quot;&gt;">

Eso daría al atributo de text el valor <a href="/"> . Tenga en cuenta que esto es solo texto sin formato, por lo que si quisiera tratarlo como HTML, tendría que ejecutar esa cadena a través de un analizador de HTML. XML DOM no analizaría el atributo de text por ti.

Sigo recibiendo "error del analizador XML: atributo sin terminar" con mi analizador cuando intento colocar texto HTML o CDATA dentro de mi atributo XML. ¿Hay alguna manera de hacer esto o no está permitido por la norma?


No podemos usar CDATA como atributo, pero podemos enlazar html utilizando códigos HTML. Aquí hay un ejemplo:

para lograr esto: <span class="abc"></span>

Usa código XML como este:

<xmlNode attibuteName="&lt;span class=&quot;abc&quot;&gt;Your Text&lt;&#47;span&gt;"></xmlNode>


No, CDATA no puede ser el valor de un atributo. Solo puede estar dentro de un elemento.


Sí, puede hacerlo cuando codifique el contenido dentro de las etiquetas XML. Es decir, utilizar &amp; &lt; &gt; &quot; &apos; , de esa manera no se verá como marca dentro de su marca.


Si un atributo no es un tipo tokenizado o enumerado, se procesa como CDATA. Los detalles sobre cómo se procesa el atributo se pueden encontrar en el Lenguaje de marcado extensible (XML) 1.0 (Quinta edición) .

3.3.1 Tipos de atributos

Los tipos de atributos XML son de tres tipos: un tipo de cadena, un conjunto de tipos de token y tipos enumerados. El tipo de cadena puede tomar cualquier cadena literal como un valor; Los tipos de tokenizados están más restringidos. Las restricciones de validez anotadas en la gramática se aplican después de que el valor del atributo se haya normalizado como se describe en 3.3.3 Normalización del valor-atributo.

[54] AttType ::= StringType | TokenizedType | EnumeratedType [55] StringType ::= ''CDATA'' [56] TokenizedType ::= ''ID'' [VC: ID] [VC: One ID per Element Type] [VC: ID Attribute Default] | ''IDREF'' [VC: IDREF] | ''IDREFS'' [VC: IDREF] | ''ENTITY'' [VC: Entity Name] | ''ENTITIES'' [VC: Entity Name] | ''NMTOKEN'' [VC: Name Token] | ''NMTOKENS'' [VC: Name Token]

...

3.3.3 Normalización atributo-valor

Antes de que el valor de un atributo pase a la aplicación o se verifique su validez, el procesador XML DEBE normalizar el valor del atributo aplicando el algoritmo a continuación, o utilizando algún otro método tal que el valor pasado a la aplicación sea el mismo que el producido. por el algoritmo.

  1. Todos los saltos de línea DEBEN haber sido normalizados en la entrada a #xA como se describe en 2.11 Manejo de fin de línea , por lo que el resto de este algoritmo opera en texto normalizado de esta manera.
  2. Comience con un valor normalizado que consiste en la cadena vacía.
  3. Para cada carácter, referencia de entidad o referencia de carácter en el valor de atributo no normalizado, comenzando con el primero y continuando hasta el último, haga lo siguiente:
    • Para una referencia de carácter, agregue el carácter referenciado al valor normalizado.
    • Para una referencia de entidad, aplique recursivamente el paso 3 de este algoritmo al texto de reemplazo de la entidad.
    • Para un carácter de espacio en blanco (# x20, #xD, #xA, # x9), agregue un carácter de espacio (# x20) al valor normalizado.
    • Para otro personaje, agregue el carácter al valor normalizado.

Si el tipo de atributo no es CDATA, entonces el procesador XML DEBE procesar aún más el valor del atributo normalizado descartando cualquier carácter de espacio inicial y final (# x20), y reemplazando las secuencias de caracteres de espacio (# x20) por un solo espacio (# x20 ) personaje.

Tenga en cuenta que si el valor del atributo no normalizado contiene una referencia de carácter a un carácter de espacio en blanco que no sea el espacio (# x20), el valor normalizado contiene el propio carácter referenciado (#xD, #xA o # x9). Esto contrasta con el caso en el que el valor no normalizado contiene un carácter de espacio en blanco (no una referencia), que se reemplaza con un carácter de espacio (# x20) en el valor normalizado y también contrasta con el caso en el que el valor no normalizado contiene una referencia de entidad cuyo El texto de reemplazo contiene un carácter de espacio en blanco; al ser procesado de forma recursiva, el carácter de espacio en blanco se reemplaza con un carácter de espacio (# x20) en el valor normalizado.

Todos los atributos para los que no se ha leído ninguna declaración DEBEN ser tratados por un procesador no validador como si se declarara CDATA .

Es un error si un valor de atributo contiene una reference a una entidad para la que no se ha leído ninguna declaración.


CDATA es, lamentablemente, algo ambiguo que decir aquí. Hay "Secciones CDATA" y "Tipo de atributo CDATA " .

El valor de su atributo puede ser de tipo CDATA con el "Tipo de atributo CDATA".

Aquí hay un xml que contiene una "Sección CDATA" ( aka. CDSect ):

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <elemke> <![CDATA[ foo ]]> </elemke>

Aquí hay un xml que contiene un "Tipo de atributo CDATA" (como AttType ):

<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE elemke [ <!ATTLIST brush wood CDATA #REQUIRED> ]> <elemke> <brush wood="guy&#xA;threep"/> </elemke>

No puede utilizar una "Sección CDATA" para un Valor de atributo: incorrecto: <brush wood=<![CDATA[foo]]>/>

Puede usar un "Tipo de atributo CDATA" para su Tipo de atributo, creo que esto es realmente lo que sucede en el caso habitual, y su valor de atributo es en realidad un CDATA: para un elemento como <brush wood="guy&#xA;threep"/> , en el bytestring binario sin formato que es el archivo .xml , tiene un guy&#xA;threep sin embargo, cuando se procesa el archivo, el valor del atributo en la memoria será

guy threep

Su problema puede estar en 1) producir un archivo xml correcto y 2) configurar un "procesador xml" para producir la salida que desea.

Por ejemplo, en caso de que escriba un archivo binario sin procesar como su xml a mano , debe poner estos escapes dentro de la parte del valor del atributo en el archivo sin procesar, como escribí <brush wood="guy&#xA;threep"/> aquí , en lugar de <brush wood="guy (nueva línea) threep"/>

Entonces el análisis realmente te daría una nueva línea, lo he intentado con un procesador.

Puede probarlo con un procesador como saxon o para el experimento de hombres pobres como un navegador, abriendo el xml en firefox y copiando el valor en un editor de texto. Firefox mostró la nueva línea como un espacio, pero copiando la cadena en un editor de texto. Mostró la nueva línea. (Probablemente con un procesador más adecuado podría guardar la salida directa de inmediato).

Ahora lo "único" que debe hacer es asegurarse de que maneja este CDATA adecuadamente. Por ejemplo, si tiene una hoja de estilo XSL, que le produciría un html, puede usar algo como este .xsl para tal xml:

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template name="split"> <xsl:param name="list" select="''''" /> <xsl:param name="separator" select="''&#xA;''" /> <xsl:if test="not($list = '''' or $separator = '''')"> <xsl:variable name="head" select="substring-before(concat($list, $separator), $separator)" /> <xsl:variable name="tail" select="substring-after($list, $separator)" /> <xsl:value-of select="$head"/> <br/><xsl:text>&#xA;</xsl:text> <xsl:call-template name="split"> <xsl:with-param name="list" select="$tail" /> <xsl:with-param name="separator" select="$separator" /> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template match="brush"> <html> <xsl:call-template name="split"> <xsl:with-param name="list" select="@wood"/> </xsl:call-template> </html> </xsl:template> </xsl:stylesheet>

Lo que en un navegador o con un procesador como saxon usando java -jar saxon9he.jar -s:eg2.xml -xsl:eg2.xsl -o:eg2.html saxon home edition 9.5 produciría esta cosa similar a html:

<html>guy<br> threep<br> </html>

que se verá así en un navegador:

guy threep

Aquí estoy usando una plantilla recursiva ''dividida'' de Tomalak , gracias a Mads Hansen , porque mi procesador de destino no admite ni string-join ni la tokenize que son solo la versión 2.0.