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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Одинарные кавычки в тексте. Как получить текст с кавычками? 
:(
    Опции темы
t77
  Дата 24.5.2010, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброе время суток.
Как обычно, считываем данные из хмл файла и все вроде как хорошо. 
Но вот если в слове, имеется одинарная кавычка, то текст обрубается с того места, где находится кавычка... Например в хмл теге явно вижу слово:
son's или don't. При обычном выводе текста, спомощью xsl:value-of select, слово обрубается и выводится ввиде son или don. Пробовал добавить disable-output-escaping="yes", но не помогает. Как быть ?
PM MAIL   Вверх
diadiavova
Дата 24.5.2010, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Ну не знаю, вот специально создал пример
хмл-файл
Код

<?xml version="1.0" encoding="utf-8"?>
<root>I don't know.</root>


хслт-файл
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
      <result>
      <xsl:value-of select="root"/>
      </result>
    </xsl:template>
</xsl:stylesheet>

результат
Код

<?xml version="1.0" encoding="utf-8"?>
<result>I don't know.</result>

Так что, опиши проблему подробнее.


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


потерял xPath
**


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

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



С помощью чего считываются данные? Java?

Проблемы скорее всего с тем, что неправильно сформирован поток, т.е. он не того типа.
PM MAIL   Вверх
t77
  Дата 24.5.2010, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Считываю данные с помощью ХСЛТ.
Запрашиваю с сервера хмл документ, затем обрабатываю его с помощью хслт и на выходе получаю чтмл.
Дело в том, что если в слове имеется кавычка, то в базе данных, в файле хмл, вместо кавычки устанавливается
Код

&apos;

То есть если мы имеем текст:
Код

don't worry be happy

то сохранится он следующим образом:
Код

<INPUT1>don&apos;t worry be happy</INPUT1>

Ну и как я говорил, при считывании значения тега INPUT1, я получаю:
Код

don

Вопрос, можно ли, с помощью хслт, распознавать знак-&apos; и заменять его на родную кавычку ? Если да, то как? 

PM MAIL   Вверх
diadiavova
Дата 24.5.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



t77, а мой пример как у тебя работает?

А вообще, с точки зрения хмл это равнозначная замена, так что если какой-то процессор выводит данные так - это не страшно. А вот что означает 
[quote=t77, 24.5.2010,  12:54, post2157949], при считывании значения тега INPUT1quote]
разъясни поподробнее. Чем считываешь то?


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


Опытный
**


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

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



[quote]
А вот что означает 
Цитата(t77 @  24.5.2010,  12:54 Найти цитируемый пост)
, при считывании значения тега INPUT1quote]
разъясни поподробнее

Не понимаю, что это означает...?
Вы о чем??
т77 это мой ник в форуме и к топику он отношения не имеет.
Цитата

t77, а мой пример как у тебя работает?

Ваш пример работает хорошо, без проблем.
А считываю значения с помощью ХСЛТ...
Все достаточно тривиально.
Пробегаюсь по всем тегам ИНПУТ1 в петле ФОРИЧ и вывожу значения в поле таблицы.
Код

<xsl:value-of select="normalize-space(./text())" disable-output-escaping="yes"/>

PM MAIL   Вверх
t77
  Дата 24.5.2010, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понимаете, если в предложении имеется одинарная кавычка, то текст обрубается и все, что идет после кавычки, просто отбрасывается.
Вопросов несколько:
1. Как распознавать этот самый знак-&apos; ?
2. Как заменять знак-&apos; на одинарную кавычку ?
3. Как сделать так, чтобы предложение не обрывалось, тоесть получить все предложение ?
И наконец, как это все реализовать ?
Спасибо
PM MAIL   Вверх
magelan
Дата 24.5.2010, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


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

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



1. &apos; распознавать не нужно, это валидный синтаксис для XML
2. &apos; заменять не нужно это и есть одинарная кавычка, валидная для HTML тоже.
3. Для этого надо ответить на простой вопрос, чем считываются данные, перед тем как они попадают к трансформеру?

XSL - это язык преобразования, доступа к файлам, базам и прочим хранителям данных он не имеет. Значит вы используете какое-то API и проблема именно с этим API, а вовсе не с XML/XSL

По описанию проблемы в голову приходит только Javascript, у которого имеются некоторые проблемы с кавычками. XML поставляется для обработки каким-то вариантом AJAX?
PM MAIL   Вверх
t77
  Дата 24.5.2010, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Уважаемые коллеги, очень важный вопрос, который вы мне задавали:
"чем считываются данные", на который я ответил как чем- хсл.
Код

<xsl:value-of select="normalize-space(./text())" disable-output-escaping="yes"/>


Спешу с вами поделиться ибо может кому пригодится...
Оказывается, проблема именно в методе -"text()", что в принципе и приводило в обрыванию текста.
Необходимо обращаться непосредственно к самому тегу для получения значения.
Спасибо всем.
PM MAIL   Вверх
diadiavova
Дата 24.5.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(t77 @  24.5.2010,  14:48 Найти цитируемый пост)
Не понимаю, что это означает...?
Вы о чем??
т77 это мой ник в форуме и к топику он отношения не имеет.

Просто при цитировании поста я выделил текста больше чем надо, и потом вручную удалил лишнее, при удалении случайно убрал квадратную скобку со слешем и в результате вместо цитаты отобразился кусок разметки, так что никакого сакрального смысла в этом не было. Предполагалось, что это будет выглядеть так
Цитата(t77 @  24.5.2010,  12:54 Найти цитируемый пост)
, при считывании значения тега INPUT1

А что касается считывания тега, то мне не понятно следующее
Цитата(t77 @  24.5.2010,  12:54 Найти цитируемый пост)

то сохранится он следующим образом:

<INPUT1>don&apos;t worry be happy</INPUT1>

Ну и как я говорил, при считывании значения тега INPUT1, я получаю:

don

Выходные данные - это и есть результат работы хслт, какое ещё считываение после этого производится, которое обрубает текст???
Цитата(t77 @  24.5.2010,  14:48 Найти цитируемый пост)
А считываю значения с помощью ХСЛТ...
Все достаточно тривиально.
Пробегаюсь по всем тегам ИНПУТ1 в петле ФОРИЧ и вывожу значения в поле таблицы.

То есть после преобразования выполняется ещё одно преобразование что ли?
Цитата(t77 @  24.5.2010,  18:47 Найти цитируемый пост)
Оказывается, проблема именно в методе -"text()", что в принципе и приводило в обрыванию текста.

Ну извиняюсь, что не догадался. Всё никак свой хрустальный шар отыскать не могу.



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


Опытный
**


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

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



Цитата

А что касается считывания тега, то мне не понятно следующее

Цитата(t77 @  24.5.2010,  12:54 ) 

то сохранится он следующим образом:

<INPUT1>don&apos;t worry be happy</INPUT1>

Ну и как я говорил, при считывании значения тега INPUT1, я получаю:

don 


Выходные данные - это и есть результат работы хслт, какое ещё считываение после этого производится, которое обрубает текст???


Понимаете в базе данных имеется хмл файл, кторый я запрашиваю для трансформации. Так вот, в этом файле ХМЛ, имеются теги разных видов... И один из таких тегов - INPUT1, значение которого я пытался считать без обрыва. Именно в этом теге(INPUT1), что находится в файле ХМЛ, который находится в базе данных, сохранялись одинарные кавычки в виде символа -&apos;

И все таки, после того как проблема решена, хотелось бы понять, почему метод "text()", не может считывать значения тега хмл. Разве это не прямая обязанность данного метода ?
PM MAIL   Вверх
diadiavova
Дата 25.5.2010, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(t77 @  25.5.2010,  10:24 Найти цитируемый пост)
И все таки, после того как проблема решена, хотелось бы понять, почему метод "text()", не может считывать значения тега хмл. Разве это не прямая обязанность данного метода ? 

XML
Код

<?xml version="1.0" encoding="utf-8"?>
<root>I don&apos;t know.</root>

XSLT
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
            <result>
                <xsl:value-of select="root/text()"/>
            </result>
    </xsl:template>
</xsl:stylesheet>



Результат
Код

<?xml version="1.0" encoding="utf-8"?>
<result>I don't know.</result>

 smile 


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


Опытный
**


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

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



Странно...
У меня срезается текст, как я описывал выше.
А может быть причина тому:
Код

encoding="utf-8"

Так как у меня установленно:
Код

<?xml version="1.0" encoding="ISO-8859-1"?>

 smile 
PM MAIL   Вверх
diadiavova
Дата 25.5.2010, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(t77 @  25.5.2010,  12:30 Найти цитируемый пост)
А может быть причина тому:

Нет.
Здесь может быть причина или в особенностях процессора, но это можно проверить если запустишь мой пример в том процессоре, который используешь ты, или, если мой пример там отработает нормально, значит проблемы в твоём коде.
Вообще выражение, ./text() возвращает не строку, а набор узлов. Чойт в документации я не нашёл как набор узлов должен конвертироваться в строку, но по идее тут проблем быть не должно на сколько я понимаю: каждый узел должен конвертироваться в текст и вся коллекция представляет конкатенацию всех этих строк, но возможно некоторые процессоры действуют иначе. Хотя, по идее, строка, содержащая объекты подстановки должна рассматриваться как один текстовый узел, это яво прописано в спецификации - два текстовых узла соседствовать не могут. Поэтому фиг знает.


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


Опытный
**


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

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



Дело в том, что я не могу запустить ваш пример, так как я работал на удаленной машине, где огромное множество хмл и хсл файлов. К тому же трансформация происходит на сервере, к которому не имею доступа в данное время. smile 
А вообще, как проверить, какой процессор используется ? Тогда я смогу установить его к себе на машину и прогнать ваш пример.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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