2011-04-26 13 views
7

Estoy tratando de usar jQuery para el procesamiento XML. Uno de los problemas que tengo con jQuery es que no distingue entre mayúsculas y minúsculas en el procesamiento de etiquetas y atributos.Insensibilidad de mayúsculas y minúsculas en los selectores?

Por ejemplo, considere el siguiente código:

$("<div><Book ISBN='1234'>Some title</Book></div>").html() 

la salida que obtenemos es:

<book isbn="1234">Some title</book> 

mientras que la salida busco es:

<Book ISBN="1234">Some title</Book> 

Cualquier posibilidad ? (Tenga en cuenta que "B" es la letra mayúscula, y que el nombre completo del atributo "ISBN" también está en mayúscula, mientras que la salida de jQuery html es completamente minúscula). Ayuda.

+2

¿Por qué necesita que se conserven las fundas? ¿Tiene problemas para analizar/atravesar el XML? '$ xml.find ('Book') 'y' $ xml.find ('book') 'son idénticos en jQuery, al igual que' $ xml.attr ('ISBN') 'y' $ xml.attr ('isbn') '. –

+0

exactamente lo que estaba intentando en este momento ... .html funciona como se esperaba, disminuyendo el caso, pero .find funciona con ambos casos. por lo tanto, podría utilizarse para encontrar el Libro, pero también devolverá el libro. ! –

+0

Saludos y firmas no se recomiendan en SO preguntas/respuestas. Cheers –

Respuesta

6

Según http://www.w3.org/TR/CSS21/selector.html, en HTML nombres de los elementos son sensibles a mayúsculas, pero en XML que son caso - sensible. Lo mismo es cierto para los nombres de atributos.

Por lo tanto, el resultado HTML que está recibiendo es correcto. Que yo sepa, jQuery core no puede crear un documento HTML, donde la sensibilidad de mayúsculas y minúsculas es importante para los nombres de elementos y atributos.

EDITAR: Vea a continuación. Originalmente, dije que jQuery no puede crear un documento XML en el que la distinción entre mayúsculas y minúsculas sea importante. Claramente, puede. Pero no puede preservar el caso si está inyectando en HTML. Para una solución, consulte: jQuery converting XML tags to uppercase

+0

* "Que yo sepa, jQuery core no puede crear un documento XML" * Claro que sí: http://api.jquery.com/jQuery.parseXML/ :-) –

+0

@ T.J. Crowder. Nunca dije que no podría crear un documento XML. Dije que jQuery no puede crear un documento XML donde la sensibilidad de mayúsculas y minúsculas es importante para los nombres de elementos y atributos. ¿Has leído la pregunta? –

+1

'@two:' Principalmente bromeaba sobre una generalización excesiva, pero: De nuevo: claro que sí: http://jsbin.com/ibixey Observe cómo los elementos 'test' y' TEST' son ** not ** lo mismo. @ Lil'Monkey tiene razón en que es mucho más sobre el método 'html' que sobre la capacidad de jQuery para trabajar con XML correctamente. –

1

el problema sería el .html() ... html en sí mismo debería estar en minúscula, por lo que jquery jsut devolverá el formato html "Válido". si necesita analizar xml, estoy seguro de que hay librairy para hacerlo que mantendrá el caso de su Xml.

personalmente me gustaría probar parseXML o cualquiera de la biblioteca se puede encontrar con una búsqueda rápida

http://api.jquery.com/jQuery.parseXML/

0

Mi problema era el XML estaba tirando de otro sitio de salida de los datos XML reales como HTML codificado ... IE:

<status> 
    <eventData> 
     &lt;net id="District 3" name="District 3"&gt; 
     &lt;updateTimestamp&gt;2014-04-16T22:15:42-05:00&lt;/updateTimestamp&gt; 
     &lt;category&gt;Current&lt;/category&gt; 
    </eventData> 
</status> 

así que no tenía control sobre cómo se se estaba emitiendo, y en un principio que acabo de utilizar jQuery básica a través de AJAX para obtener el código XML, y luego con los datos devueltos

$.get(eventDataURL, {}, function (rawXML) { 
    var xml = $(rawXML).text(); 
} 

Si he utilizado $(rawxml).text(); que hizo posible que pasar por cada uno, el problema vino cuando me daba de comer esa información a $(xml).find('event').filter(function(){ ....

Una vez que pasó por .find y .filter, todo el cameCasing se perdió, e hizo un montón de problemas para las cosas que dependían de la carcasa de camello.

Así que la solución simple era como otros mencionados anteriormente:

$.get(eventDataURL, {}, function (rawXML) { 
    var xmlText = $(rawXML).text(); 
    xml = $.parseXML(xmlText); 
} 

Simplemente usando $.parseXML que convierte ese texto en un documento XML válido que no perdió camelCasing.

Cuestiones relacionadas