Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Замена символов > на >

Замена символов > на >
Я
   Night_Wolf
 
25.06.14 - 15:39
Здравствуйте!

Подскажите пожалуйста, почему при записи строки вида:
<Данные><РеквизитИмя="ИмяРеквизита" Значение="ЗначениеРеквизита"/></Данные>
в xml-файл через метод ЗаписьXML.ЗаписатьАтрибут() не меняет ">" на &gt; ???

Получаю вот такую строку:

<ИнфПол ТекстИнф="&lt;Данные>&lt;РеквизитИмя=&quot;ИмяРеквизита&quot; Значение=&quot;ЗначениеРеквизита&quot;/>&lt;/Данные>"/>

Подскажите что за глюк такой непонятный?
 
 
   Night_Wolf
 
1 - 25.06.14 - 15:52
Неужели не знает никто? Написал простой код для проверки:
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("d:\Test_xml.xml");
Запись.ЗаписатьНачалоЭлемента("Корень");
Запись.ЗаписатьНачалоЭлемента("Проверка");

Запись.ЗаписатьАтрибут("Кавычки","""");
Запись.ЗаписатьАтрибут("Меньше","<");
Запись.ЗаписатьАтрибут("Больше",">");

Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();

Открываю файл и вижу: 
<Корень>
<Проверка Кавычки="&quot;" Меньше="&lt;" Больше=">"/>
</Корень>

Если руками начать переписывать ">" на "&gt;", то потом & он меняет на "&amp;" и получается ерунда тоже. Как быть?
   acsent
 
2 - 25.06.14 - 16:02
и в чем проблема то???
   Fragster
 
3 - 25.06.14 - 16:05
(0) так ведь все правильно
   Night_Wolf
 
4 - 25.06.14 - 16:06
Проблема в том, что надо получить 
Больше="&gt;

А как это сделать?
   Wobland
 
5 - 25.06.14 - 16:06
а мешает жить?
Чтение=Новый ЧтениеXML;
Чтение.ОткрытьФайл("e:\Test_xml.xml");
Пока Чтение.Прочитать() Цикл
...

--Корень
--Проверка
"
<
>
--Конец:Проверка
--Конец:Корень
   Fragster
 
6 - 25.06.14 - 16:07
(3) ыыы, и правда глючит
(5) бывает, что мешает жить сторонним программам
   Night_Wolf
 
7 - 25.06.14 - 16:08
(3) - почему правильно? 1С не меняет символ ">" на "&gt;"? Может надо написать что-то другое, вместо ">", чтобы получить "&gt;"?

(5) - мешает очень сильно, потому как из-за того, что не меняет - не отображается информация на сайте.
   Wobland
 
8 - 25.06.14 - 16:09
СтрЗаменить к тексту файла, конечно,уже рассматривалось. а прикольный.. баг?
   Night_Wolf
 
9 - 25.06.14 - 16:11
Нашел вроде как обойти:
Все, что размещено в этой конструкции(<![CDATA[............]]>), анализатор будет считать обычным текстом и не будет обращать на него внимание. Правильно эта конструкция называется секция CDATA, то есть раздел непарсируемых данных.

Но нашей любимой 1С на это тоже глубоко всё равно. Меняет и всё тут.

(8) - СтрЗаменить - нельзя, так как в сформированном XML-тексте целая куча угловых скобок закрывающих тегов.
   Wobland
 
10 - 25.06.14 - 16:12
(9) да, я чего-то снова перегрелся. жара ;)
   Wobland
 
11 - 25.06.14 - 16:13
не, ну можно ж "&amp;gt" превратить в "&gt"
   acsent
 
12 - 25.06.14 - 16:14
Эта ошибка еще с 2008
https://partners.v8.1c.ru/forum/message/598893
   Fragster
 
13 - 25.06.14 - 16:15
(12) там же сказано, что это не ошибка
   Night_Wolf
 
14 - 25.06.14 - 16:16
(11) - закрытый код обработки, которая получает XML. Я могу подать только входную строку в определенном формате. И дальше она сама уже преобразует его в xml и выкладевает на фтп для сайта.

(12) - у меня к сожалению туда доступа нет. Не могли бы Вы скопировать предложенное решение? Если не сложно.
   acsent
 
15 - 25.06.14 - 16:16
Тут рекомедуют не атрибуты, а элементы создавать. Если конечно есть возможность менять формат хмл
   Fragster
 
16 - 25.06.14 - 16:17
0
Чичерин Андрей (1С, Москва)
10.07.2008 17:27
598904
Отвечает на

Вы правы, в рекомендации W3C сказано:



The right angle bracket (>) may be represented using the string "&gt;", and MUST, for compatibility, be escaped using either "&gt;" or a character reference when it appears in the string "]]>" in content, when that string is not marking the end of a CDATA section
   Night_Wolf
 
17 - 25.06.14 - 16:17
(15) Формат для файла к сожалению тоже жестко задан. Федеральным законом.
   Fragster
 
18 - 25.06.14 - 16:17
т.е. болжна только в CDATA когда в секции есть строка "]]>" экранироваться, а иначе - по желанию. парсеры давиться не должны.
   Fragster
 
19 - 25.06.14 - 16:18
(17) попробуй скормить так
   Fragster
 
20 - 25.06.14 - 16:18
оттуда же: Что еще интересно - пока что на получающиеся таким образом файлы еще никто из программ не ругался, все молча кушают и не давятся. :) Да и сам я это случайно заметил.
   Fragster
 
21 - 25.06.14 - 16:21
а вот это уже бага:

Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Запись.ЗаписатьНачалоЭлемента("Корень");
Запись.ЗаписатьНачалоЭлемента("Проверка");
//Запись.ЗаписатьБезОбработки("Проверка");


Запись.ЗаписатьАтрибут("Кавычки","""");
Запись.ЗаписатьАтрибут("Меньше","<");
Запись.ЗаписатьНачалоАтрибута("Больше");
Запись.ЗаписатьБезОбработки(">");
Запись.ЗаписатьКонецАтрибута();
Запись.ЗаписатьСекциюCDATA("]]>");
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьКонецЭлемента();
Результат = Запись.Закрыть();
   Night_Wolf
 
22 - 25.06.14 - 16:24
(17) Проверил. Не работает:
<Проверка
Тест_CDATA="&lt;![CDATA[Внутри этой конструкции можно размещать любые символы, даже запрещенные(>,&lt;,&amp;)
]]&#62;"/>
   acsent
 
23 - 25.06.14 - 16:26
Есть конечно последний вариант: формировать текст хмл вручную
   Night_Wolf
 
24 - 25.06.14 - 16:27
Проблему решил - на сайте отобразилось и с ">" в файле. Но это реально бага 1С. Если есть у кого-нибудь возможность написать на поддержку эту ошибку - напишите пожалуйста. Вдруг кому будет важно.

Спасибо всем за то что откликнулись!
   Serginio1
 
25 - 25.06.14 - 16:34


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.