Форум Академгородка, Новосибирск > Экранирование символов в XSLt
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Экранирование символов в XSLt
Форум Академгородка, Новосибирск > Компьютеры и сети > Программирование > WEB-программирование
Zebooka
Задача следующая:
Есть XML, есть XSLt шаблон. Нужно трансформировать XML в JavaScript и за'eval'ить.
Возникает проблема: необходимо при выводе экранировать бэк-слешем все символы " ("), которые были в исходном XML в тэгах, чтобы не было глюков и JS-инъекций.

к примеру выводится
Цитата
rootPersons = "<xsl:value-of select="Folders/PersonsRoot" />";

нужно, чтобы в Folders/PersonsRoot все " были заменены на \"
Zebooka
Мой процессор это браузер и то что в него встроенно (осел 6 и выше, ФФ 2 и выше) smile.gif
А точнее (через JS делается загрузка и парсинг)
Код
function _ParseXML(xmlObject, xsltObject)
{
    if (window.ActiveXObject)
    {
        // IE
        result = xmlObject.transformNode(xsltObject);
        return result;
    }
    else if (document.implementation && document.implementation.createDocument)
    {
        // Firefox, Opera, etc.
        xsltProcessor=new XSLTProcessor();
        xsltProcessor.importStylesheet(xsltObject);
        result = xsltProcessor.transformToFragment(xmlObject, document);
        return result.textContent;
    }
    else
    {
        return false;
    }
}

function _LoadXML_FromFile(filename)
{
    var xmlDoc;
    
    if (window.ActiveXObject)
    {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.load(filename);
        return(xmlDoc);
    }
    else if (document.implementation && document.implementation.createDocument)
    {
        xmlDoc = document.implementation.createDocument("","",null);
        xmlDoc.async = false;
        xmlDoc.load(filename);
        return(xmlDoc);
    }
    else
    {
        return false;
    }
}
Zebooka
Вот я тоже склоняюсь к темплейту, а с $$$ не пройдет т.к. в хмлке может встретится $$$ и тогда все рухнет smile.gif
Будем пробовать
Zebooka
Сделал вот так:

Код
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:zebooka="http://www.zebooka.com/web/xsl"
>
<xsl:strip-space elements="*" />
      
        
<xsl:template name="zebooka:escapeString">
    <xsl:param name="string" select="''" />
    <xsl:choose>
        <xsl:when test="contains($string, '&quot;')">
            <xsl:call-template name="zebooka:escapeString">
                <xsl:with-param name="string" select="substring-before($string, '&quot;')" />
            </xsl:call-template>
            
            <xsl:text>\&quot;</xsl:text>
            
            <xsl:call-template name="zebooka:escapeString">
                <xsl:with-param name="string" select="substring-after($string, '&quot;')" />
            </xsl:call-template>
        </xsl:when>
        <xsl:when test="contains($string, ' ')">
            <xsl:call-template name="zebooka:escapeString">
                <xsl:with-param name="string" select="substring-before($string, ' ')" />
            </xsl:call-template>
            
            <xsl:text>\n</xsl:text>
            
            <xsl:call-template name="zebooka:escapeString">
                <xsl:with-param name="string" select="substring-after($string, ' ')" />
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$string" />
        </xsl:otherwise>
        </xsl:choose>
</xsl:template>
        
</xsl:stylesheet>
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2024 IPS, Inc.