Модераторы: diadiavova

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xml+xslt как бороться с двоеточием в тэгах? 
:(
    Опции темы
zloyGamer
Дата 20.7.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 24.2.2008
Где: аватар какает

Репутация: нет
Всего: нет



привет, скажите как бороться со спец символами в xslt шаблонах

например:

для вот этой xml'ки:
Код

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
    <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
    </cd>
</catalog>


xslt:
Код

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <h2>My CD Collection</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Title</th>
        <th>Artist</th>
      </tr>
      <tr>
        <td> <xsl:value-of select="catalog/cd/title" /> </td>
        <td test:my_vaue=1> <xsl:value-of select="catalog/cd/artist" /> </td>
      </tr>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>



если из xslt убрать test:my_vaue=1 то нормально получается почти то что мне надо: 
Код

<html>
    <body>
        <h2>My CD Collection</h2>
        <table border="1">
            <tr bgcolor="#9acd32">
                <th>Title</th>
                <th>Artist</th>
            </tr>
            <tr>
                <td>Empire Burlesque</td>
                <td>Bob Dylan</td>
            </tr>
        </table>
    </body>
</html>


проблема в двоеточии!!, как с ними бороться?

я бы мог <td test:my_vaue=1>Bob Dylan</td> вставить в исходную xml'ку но тогда парсер нормально не отработает т.к. это уже получится ещё один  xml тэг...

Это сообщение отредактировал(а) zloyGamer - 20.7.2009, 10:22
PM MAIL   Вверх
diadiavova
Дата 20.7.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Единицу надо в кавычки заключить, а префикс должен указывать на пространство имён.
Код

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:test="urn:aaa-hghg/ytjy"  >
  <xsl:template match="/">
    <html>
      <body>
        <h2>My CD Collection</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Title</th>
            <th>Artist</th>
          </tr>
          <tr>
            <td>
              <xsl:value-of select="catalog/cd/title" />
            </td>
            <td test:my_vaue="1">
              <xsl:value-of select="catalog/cd/artist" />
            </td>
          </tr>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
zloyGamer
Дата 20.7.2009, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 24.2.2008
Где: аватар какает

Репутация: нет
Всего: нет



тогда в получаемом файле появляется ещё один лишний, ненужный параметр :  xmlns:test="urn:aaa-hghg/ytjy"
Код

<html>
    <body>
        <h2>My CD Collection</h2>
        <table border="1">
            <tr bgcolor="#9acd32">
                <th>Title</th>
                <th>Artist</th>
            </tr>
            <tr>
                <td>Empire Burlesque</td>
                <td xmlns:test="urn:aaa-hghg/ytjy" test:my_vaue="1">Bob Dylan</td>
            </tr>
        </table>
    </body>
</html>


а вообще интиресует возможно ли и как вбивать любой текст между <xsl:value-of select="..." /> чтоб потом это нормально обрабатывалось? 
PM MAIL   Вверх
diadiavova
Дата 20.7.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(zloyGamer @  20.7.2009,  21:30 Найти цитируемый пост)
тогда в получаемом файле появляется ещё один лишний, ненужный параметр

Префикс всегда обозначает пространство имён, поэтому мне не понятно, что значит ненужный параметр.
Если надо сформировать документ не привязанный к каким-либо правилам, то тогда надо указать выходной формат - текст.
Код

<xsl:output method="text"/>

Ну тогда и документ придётся формировать соответственно


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
zloyGamer
Дата 21.7.2009, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 24.2.2008
Где: аватар какает

Репутация: нет
Всего: нет



<xsl:output method="text"/>
вот!! это то что надо! просто и неважно какой текст вокруг - главное вставить то что мне надо в нужное место, и неважно что там и неважно что вокруг..

тока вот такая вот xslt непрокатывает:
Код

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
  <html>
  <body>
    <h2>My CD Collection</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Title</th>
        <th>Artist</th>
      </tr>
      <tr>
        <td test> <xsl:value-of select="catalog/cd/title" /> </td>
        <td> <xsl:value-of select="catalog/cd/artist" /> </td>
      </tr>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>


проблема в 15 строчке!, хотя уже прописано <xsl:output method="text"/> но что то всеравно сделано не так..
по каким правилам должен быть отформатирован текст вокруг чтоб работало?

Это сообщение отредактировал(а) zloyGamer - 21.7.2009, 07:16
PM MAIL   Вверх
diadiavova
Дата 21.7.2009, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(zloyGamer @  21.7.2009,  08:13 Найти цитируемый пост)
проблема в 15 строчке!

А что с ней?

Добавлено через 8 минут и 6 секунд
Просто когда ты выводишь продукцию в формате html, то тебе не приходится заботиться о том чтобы всё соответствовало формату. Всё и так генерится как надо, а если это текст, то придётся всё ручками формировать. Например частенько использовать тэг xsl:text для создания элемента

Код

        <xsl:text>&lt;td test:my_vaue=1 &gt;<xsl:text>
        <xsl:value-of select="catalog/cd/title" /> 
        <xsl:text>&lt;/td &gt;<xsl:text>

Вместо 15 строки.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
jsa
Дата 21.7.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



Цитата(zloyGamer @  21.7.2009,  12:13 Найти цитируемый пост)
проблема в 15 строчке!, хотя уже прописано <xsl:output method="text"/> но что то всеравно сделано не так..
по каким правилам должен быть отформатирован текст вокруг чтоб работало?


zloyGamer, а нафига такой гемор вообще

Это сообщение отредактировал(а) jsa - 21.7.2009, 12:45


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
zloyGamer
Дата 21.7.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 24.2.2008
Где: аватар какает

Репутация: нет
Всего: нет



Цитата(diadiavova @ 21.7.2009,  11:21)
Цитата(zloyGamer @  21.7.2009,  08:13 Найти цитируемый пост)
проблема в 15 строчке!

А что с ней?

Добавлено @ 11:30
Просто когда ты выводишь продукцию в формате html, то тебе не приходится заботиться о том чтобы всё соответствовало формату. Всё и так генерится как надо, а если это текст, то придётся всё ручками формировать. Например частенько использовать тэг xsl:text для создания элемента

Код

        <xsl:text>&lt;td test:my_vaue=1 &gt;<xsl:text>
        <xsl:value-of select="catalog/cd/title" /> 
        <xsl:text>&lt;/td &gt;<xsl:text>

Вместо 15 строки.

нда, получается так, если проще никак, 
получается сначала придется править все скобки "<>" на &lt; и &qt; а потом ещё и после генерации править все 
 &lt; и &qt; на "<" и ">",
чет много телодвижений однако...

Цитата

zloyGamer, а нафига такой гемор вообще

просто если генерить не просто html'ку а xml'ку для офисов то у них там всякая ерунда в тегах прописана..,
а без неё никак, если есть способ по проще напишите пожалуста..
PM MAIL   Вверх
diadiavova
Дата 21.7.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



zloyGamer, ну вообще-то в конечном документе ничего менять не надо, другой вопрос, что весь документ так придётся формировать. Но тут на помощь может прийти волшебный блок CDATA
Код

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:test="urn:aaa-hghg/ytjy"  >
  <xsl:output method="text"/>
  <xsl:template match="/">
    <![CDATA[
    <html>
      <body>
        <h2>My CD Collection</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Title</th>
            <th>Artist</th>
          </tr>
          <tr>
            <td>]]><xsl:value-of select="catalog/cd/title" /><![CDATA[</td>
            <td test:my_vaue=1 >]]><xsl:value-of select="catalog/cd/title" /><![CDATA[</td >
          </tr>
        </table>
      </body>
    </html>]]>
  </xsl:template>
</xsl:stylesheet>


PS 
Там у меня в предыдущем примере незакрытые теги text, надеюсь ты понял smile


И кстати: можно ещё так написать
Код

<xsl:output method="xml"/>

Правда в хмл с пространствами имён дело обстоит ещё строже, чем хтмл. Если префикс используется, то пространство должно быть объявлено.

Это сообщение отредактировал(а) diadiavova - 21.7.2009, 13:33


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
zloyGamer
Дата 21.7.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 24.2.2008
Где: аватар какает

Репутация: нет
Всего: нет



ввооо! вроде точто надо, тока щас проверить немогу..., 
спасибо как получится отпишусь
PM MAIL   Вверх
zloyGamer
Дата 21.7.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 24.2.2008
Где: аватар какает

Репутация: нет
Всего: нет



спасибо огромное!! эт то что надо, как доктор прописал!! ))

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

вот тока в результате все спецсимволы переводятся в их мнемоничные формы:
xsl
Код

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">

<html><body>
<![CDATA[
&
<table>
      <tr bgcolor="#9acd32">
      <th>Title</th>
      <th>Artist</th>
      </tr>
      <tr>     
      <td>  ]]>  
      <xsl:value-of select="catalog/cd/title" />  
      <![CDATA[ </td>
      <td testmy_vaue="1"> ]]>    
          <xsl:value-of select="catalog/cd/artist" /> 
      <![CDATA[ </td>
      </tr> 
    </table>
 ]]>
  </body>
  </html>


</xsl:template>
</xsl:stylesheet>


в:
Код

<html>
    <body>
&amp;
&lt;table&gt;
      &lt;tr bgcolor="#9acd32"&gt;
      &lt;th&gt;Title&lt;/th&gt;
      &lt;th&gt;Artist&lt;/th&gt;
      &lt;/tr&gt;
      &lt;tr&gt;     
      &lt;td&gt;  Empire Burlesque &lt;/td&gt;
      &lt;td testmy_vaue="1"&gt; Bob Dylan &lt;/td&gt;
      &lt;/tr&gt; 
    &lt;/table&gt;
 </body>
</html>

это уже мелочи, и можно элементарно поправить автозаменой..
 
можно ли в самом xslt указать чтоб этого не происходило?
PM MAIL   Вверх
diadiavova
Дата 21.7.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Видимо это от xslt-процессора зависит. Лично у меня этот же стиль выдал вот что
Код


    
    <html>
      <body>
        <h2>My CD Collection</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Title</th>
            <th>Artist</th>
          </tr>
          <tr>
            <td>
              Empire Burlesque
            </td>
            <td test:my_vaue=1 >
        Empire Burlesque 
        </td >
          </tr>
        </table>
      </body>
    </html>
  

Так что это от не по xslt вопрос, а по конкретной реализации процессора. Я всё делаю в Visual Studio 2008, стало быть используется msxml.

Добавлено @ 18:12
Можно попробовать сам блок CDATA заключить в элемент text, но не знаю, что выйдет.

Код

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:test="urn:aaa-hghg/ytjy" >
  <xsl:output method="text"/>
  <xsl:template match="/">
    <xsl:text><![CDATA[<html>
      <body>
        <h2>My CD Collection</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Title</th>
            <th>Artist</th>
          </tr>
          <tr>
            <td>]]></xsl:text>
    <xsl:value-of select="catalog/cd/title" />
    <xsl:text><![CDATA[</td>
            <td test:my_vaue=1 >]]></xsl:text>
    <xsl:value-of select="catalog/cd/title" />
    <xsl:text><![CDATA[</td >
          </tr>
        </table>
      </body>
    </html>]]></xsl:text>
  </xsl:template>
</xsl:stylesheet>


Это сообщение отредактировал(а) diadiavova - 21.7.2009, 18:48


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
zloyGamer
Дата 24.7.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 24.2.2008
Где: аватар какает

Репутация: нет
Всего: нет



нет, от <xsl:text> ...  </xsl:text> ничего не изменилось, 

спасибо огромное diadiavova, ты оч.помог, 

теперь буду с xslt процессорами эксперементировать..
если что ещё выясню отпишусь..
PM MAIL   Вверх
kamagan
Дата 12.8.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Примерно таже проблема, нужно вставить готовый XHTML код в XML, но после преобразования все спецсимволы заменяются на сущности. 

<xsl:output encoding="utf-8" method="text" /> и <![CDATE[...]]> не помогают, может есть ещё варианты.

Преобразование делаю на сервере c помощью php5_xsl (Linux / Apache 2.2.8 / PHP 5.2.5). может это можно где-то на сервере настроить?
PM MAIL   Вверх
diadiavova
Дата 12.8.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



kamagan, а почему нельзя просто вставить фрагмент и всё? Топикастеру по каким-то причинам надо было чтобы не добавлялось пространство имён в финальный документ, но, честно говоря, я и не думал, что эта задача такая распространённая. В правильном XML-документе не может появиться необъявленный префикс. Из-за этого нельзя получить такое в виде XML. Но мне не понятно какие причины могут быть на то, чтобы пытаться создать неправильный документ.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
kamagan
Дата 13.8.2009, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Дело в том что сайт хочу переделать на использование XML / XSLT шаблона, а в базе за несколько лет накопилось прилично материала в HTML-виде. Поэтому хотелось бы внедрить его в XML, но так чтобы он игнорировался, и оставался в первозданном виде.

Есть конечно такой вариант: в XML воткнуть метки, которые после преобразования можно заменить на материалы из базы, но не очень хочется выполнять кучу строковых замен на PHP. Если есть идеи получше - предлагайте.

Наверно правильнее будет все материалы в базе перегнать из HTML в XML?
PM MAIL   Вверх
jsa
Дата 13.8.2009, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



Цитата(kamagan @  13.8.2009,  11:08 Найти цитируемый пост)
Есть конечно такой вариант: в XML воткнуть метки, которые после преобразования можно заменить на материалы из базы, но не очень хочется выполнять кучу строковых замен на PHP. Если есть идеи получше - предлагайте.

CDATA ноды с содержанием html, я так делаю, хтмл контент дергается из базы
проблем нет

Добавлено через 1 минуту и 39 секунд
Цитата(kamagan @  12.8.2009,  18:54 Найти цитируемый пост)
Примерно таже проблема, нужно вставить готовый XHTML код в XML, но после преобразования все спецсимволы заменяются на сущности. 

<xsl:value-of select="" disable-output-escaping="yes" />


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
kamagan
Дата 13.8.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 3.8.2009

Репутация: нет
Всего: нет



Цитата

Код

<xsl:value-of select="" disable-output-escaping="yes" />


Огромное спасибо.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0599 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.