Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > escaping символов


Автор: nmn 18.3.2010, 13:49
вот  есть 
Код

<xsl:text disable-output-escaping="yes"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">]]></xsl:text>


тем не менее полсле преобразований все равно < заменяется на &gt;

Автор: diadiavova 18.3.2010, 14:37
Доктайп выводится с помощью элемента output, а эскейпится из-за того, что таков стандарт XML, в нём эти символы недопустимы не в тех местах, если в качестве метода вывода указать text, то этого происходить не будет.

Автор: nmn 18.3.2010, 19:35
то бишь если html, то никак вывести не удастся?
а чем text отличается от html вывода?

Автор: diadiavova 18.3.2010, 20:12
Цитата(nmn @  18.3.2010,  19:35 Найти цитируемый пост)
а чем text отличается от html вывода? 

Тем, что в HTML, так же как и в XML эти символы имеют специальное значение и просто так в тексте появиться не могут, а для вывода их как спецсимволов существую свои правила(как например для доктайпа, который указывается в элементе output).

Автор: nmn 18.3.2010, 22:11
хмм обидно...
а как же быть с тегами, где необходимо подставить значение в атрибут?
например <img href="подставляемое значение" />?

Автор: diadiavova 18.3.2010, 22:13
Цитата(nmn @  18.3.2010,  22:11 Найти цитируемый пост)
а как же быть с тегами, где необходимо подставить значение в атрибут?
например <img href="подставляемое значение" />? 

Да очень просто
Код

<img href="{выражение}" />

Автор: nmn 18.3.2010, 22:17
спасибо!!!

Автор: nmn 31.3.2010, 14:24
позарез надо выводить информацию вида <script>тело скрипта</script>
в теле скрипта встречаются символы '<' '>'. есть ли какие то лазейки для того чтобы в поток вывода вывести '<' или '>'?

Автор: diadiavova 31.3.2010, 14:32
Цитата(nmn @  31.3.2010,  14:24 Найти цитируемый пост)
есть ли какие то лазейки для того чтобы в поток вывода вывести '<' или '>'? 

Конечно
Код

&lt; &gt;

Автор: nmn 31.3.2010, 19:18
нужно вывести именно < или >

Автор: diadiavova 31.3.2010, 19:44
Цитата(nmn @  31.3.2010,  20:18 Найти цитируемый пост)
нужно вывести именно < или > 

Я понял smile 

Автор: nmn 31.3.2010, 21:41
Код

<xsl:template match="/">
        
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr">
            
            <head>
                <title><xsl:value-of select="trans:chapter/@title"/></title>
                <link rel="stylesheet" type="text/css" href="mysite.css"/>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                
                <script type="text/javasctipt">
function testF()
                    {
                    alert(10&gt;1);
                    }
                </script>
...
</xsl:template>

все равно выводит &gt; а нужно >

Автор: diadiavova 31.3.2010, 22:15
Тогда так
Код

    <xsl:text disable-output-escaping="yes">&gt;</xsl:text>

Автор: nmn 31.3.2010, 22:33
громоздко, но все равно спасибо!!!

Автор: diadiavova 1.4.2010, 12:55
В элементе text можно разместить весь скрипт, а не только один символ. Кроме того, скрипт всегда можно вынести в отдельный файл.

Автор: magelan 5.4.2010, 15:54
Если лень морочится с валидностью, то javascript обычно пишут так:

<script TYPE="text/javascript">
<![CDATA[
if( a > b && a < c ) a++;
]]>
</SCRIPT>

Если атрибуты не требуют выбора, то ДядяВова абсолютно прав, если для вычисления требуются проверки, то существует еще такой способ:

<TABLE>
<TR>
<xsl:for-each select="$rows">
<TD>
<xsl:attribute name="BGCOLOR">
  <xsl:choose>
    <xsl:when test="position() mod 2 = 0">
       <xsl:text>#CCCCCC</xsl:text>
    </xsl:when>
    <xsl:otherwise>
      <xsl:text>White</xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</xsl:attribute>
</TD>
</xsl:for-each>
</TR>
</TABLE>

Автор: nmn 5.4.2010, 16:40
Цитата(magelan @  5.4.2010,  15:54 Найти цитируемый пост)
Если атрибуты не требуют выбора, то ДядяВова абсолютно прав, если для вычисления требуются проверки, то существует еще такой способ:

<TABLE>
<TR>
<xsl:for-each select="$rows">
<TD>
<xsl:attribute name="BGCOLOR">
  <xsl:choose>
    <xsl:when test="position() mod 2 = 0">
       <xsl:text>#CCCCCC</xsl:text>
    </xsl:when>
    <xsl:otherwise>
      <xsl:text>White</xsl:text>
    </xsl:otherwise>
  </xsl:choose>
</xsl:attribute>
</TD>
</xsl:for-each>
</TR>
</TABLE> 


это к чему? smile

Автор: magelan 5.4.2010, 16:46
Цитата

а как же быть с тегами, где необходимо подставить значение в атрибут?
например <img href="подставляемое значение" />? 

к этому.

можно так: <IMG SRC="{$path}" />
можно так:
<IMG>
   <xsl:attribute name="SRC">
       <xsl:value-of select="$path" />
   </xsl:attribute>
</IMG>

задачи бывают разные, но чаще всего, конечно, используется 1й вариант.

Автор: davidoffpk 18.5.2010, 10:12
Тема ранее уже была поднята, но решение мне не помогает...

Через xslt преобразование хочу добавить к xml строчку, предположим:

Код

<НаимОрг> Контора "Рога и Копыта"</НаимОрг> 


На выходе получаю:
...
Код

<НаимОрг> Контора &quot;Рога и Копыта&quot;</НаимОрг>


Использую процессор Oracle 10g.

Пробовал выводить через CDATA ,

пробовал 
Код

<xsl:text disable-output-escaping="yes">Контора &quot;Рога и Копыта&quot;</xsl:text>


не помогает...

Подскажите, плиз, как решить этот вопрос...

Автор: diadiavova 18.5.2010, 10:15
Заключи свои "рога и копыта" в элемент text и установи соответстующий атрибут в нём.

Автор: davidoffpk 18.5.2010, 11:00
Код

<xsl:text disable-output-escaping="yes">Контора "Рога и Копыта"</xsl:text> 


Так?

Так я тоже пробовал, не помогло.

Автор: diadiavova 18.5.2010, 11:11
Тут всё может зависеть от того, на чём выполняешь преодразование. Особенностей поведения всех процессоров я не знаю, я только что скопипастил пример с твоего поста и выполнил в Visual Studio. Всё получилось нормально, если у тебя не работает как надо - ищи решение в документации по используемому тобой xslt-процессору.

Автор: magelan 18.5.2010, 14:07
Код

<xsl:text disable-output-escaping="yes"><![CDATA[Контора "Рога и Копыта"]]></xsl:text> 

Так лопают все парсеры. Но проблема может быть не в парсере а в форматтере. Это та хрень, которая делает постобработку результата трансформера, глотает пробелы, убирает закрытие тегов типа br и img и занимается прочей ерундой.

Автор: nmn 31.5.2010, 17:17
в движке gecko есть проблема с disable-output-escaping, точнее он его просто игнорирует и ескейпит в независимости от этого параметра

есть ли какие то решения?

Автор: nmn 1.6.2010, 23:37
нашел некоторый вариант решения моей проблемы, мне нужно было выводить теги <a>. Содержимое тега все заключено в <![CDATA[]]>, а для того чтобы включить в содержимое тег <a> приходится разрывать секцию <![CDATA[]]>, т.е. <![CDATA[[some content-data which I]><a>a tag data</a><![CDATA[[had to cut into two parts]]>, а в правилах преобразования добавить правило вывода для этого тега

но вот как быть с амперсандами и прочим?

Автор: magelan 7.6.2010, 11:50
поменяй парсер.
увы, ничего умнее предложить не получается. 
я в 2000 году работал с xalan и таких "детских" проблем у него не было уже тогда.
Под виндами бессмертный MSXML, который по скорости трансформа просто Шумахер.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)