Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

126
Visualizações
Error de transformación XML. Trabajando en IE8 pero no en otro navegador. xmlDOM transformNode rompiendo navegadores más nuevos

Tengo problemas con el navegador al ejecutar los siguientes scripts. Es una aplicación muy antigua que heredé y no puedo encontrar referencias a este problema que no sea de hace más de 5, 7 y 10 años.

El script funciona solo cuando se ejecuta IE en modo de compatibilidad con IE7 y no funciona en ningún otro navegador.

 gei("calUTA").innerHTML = "<td><xml id=\"calXSLUTA\"><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"><xsl:template match=\"/\"><xsl:for-each select=\"/root/month\"><xsl:if test=\"name=\'"+moName[showMo]+"\' and year=\'"+showYr+"\'\"><xsl:value-of select=\"uta\"/></xsl:if></xsl:for-each></xsl:template></xsl:stylesheet></xml></td>"; loopTrans("calXSLUTA","calUTA","big"); function loopTrans(f1,f2,z) { if (z == "big" || z == "stu") { xmlDOM = gei(z + "XML").XMLDocument; } xslDOM = eval(f1 + ".XMLDocument"); gei(f2).innerHTML = xmlDOM.transformNode(xslDOM); }

Los navegadores más nuevos parecen estar fallando al ejecutar la función transformNode. Cualquier ayuda será apreciada.

El mensaje de error específico devuelto es "No se puede obtener la propiedad 'transformNode' de referencia indefinida o nula".

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

La API para ejecutar XSLT 1.0 del lado del cliente por el navegador desde JavaScript en cualquier otro navegador, excepto los basados en IE, está documentada en https://developer.mozilla.org/en-US/docs/Web/API/XSLTProcessor . Todo el material heredado de IE, como las islas de datos XML, ni siquiera es compatible con las últimas versiones de IE, aunque aún deberían permitirle crear instancias de new ActiveXObject('Msxml2.DOMDocument.3.0') para tener un documento XML DOM para loadXML XML la entrada XML o el código XSLT de una cadena (o el método de load para cargar desde una URL) y luego ejecute transformNode en ese XML DOM creado.

Así que el código IE sería como

 var xmlDoc = new ActiveXObject('Msxml2.DOMDocument.3.0'); xmlDoc.loadXML('<root><month>..<\/month><\/root>'); var xsltDoc = new ActiveXObject('Msxml2.DOMDocument.3.0'); xsltDoc.loadXML('<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"><xsl:template match=\"/\"><xsl:for-each select=\"/root/month\"><xsl:if test=\"name=\'"+moName[showMo]+"\' and year=\'"+showYr+"\'\"><xsl:value-of select=\"uta\"/></xsl:if></xsl:for-each></xsl:template></xsl:stylesheet>'); var transformationResult = xmlDoc.transformNode(xsltDoc); // assign the result string to innerHTML of an HTML element to render it

otro navegador como

 var domParser = new DOMParser(); var xmlDoc = domParser.parseFromString('<root><month>..<\/month><\/root>', 'application/xml'); var xsltDoc = domParser.parseFromString('<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"><xsl:template match=\"/\"><xsl:for-each select=\"/root/month\"><xsl:if test=\"name=\'"+moName[showMo]+"\' and year=\'"+showYr+"\'\"><xsl:value-of select=\"uta\"/></xsl:if></xsl:for-each></xsl:template></xsl:stylesheet>', 'application/xml'); var xsltProcessor = new XSLTProcessor(); xsltProcessor.importStylesheet(xsltDoc); var transformationResult = xsltProcessor.transformToFragment(xmlDoc, document); // insert this document fragment with eg appendChild to HTML element to render it

En cualquier caso, si no necesita soporte para IE, consideraría abandonar XSLT 1 y usar Saxon-JS 2 y XSLT 3 en su lugar. En cualquier caso, el uso de un parámetro XSLT con xsl:param en lugar de esa concatenación de cadenas en <xsl:if test=\"name=\'"+moName[showMo]+"\' debería hacer que el código sea más sólido.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda