Имя: Пароль:
1C
1С v8
Замена символов > на >
,
0 Night_Wolf
 
25.06.14
15:39
Здравствуйте!

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

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

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

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

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

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

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

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

А как это сделать?
5 Wobland
 
25.06.14
16:06
а мешает жить?

Чтение=Новый ЧтениеXML;
Чтение.ОткрытьФайл("e:\Test_xml.xml");
Пока Чтение.Прочитать() Цикл
...

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

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

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

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

(12) - у меня к сожалению туда доступа нет. Не могли бы Вы скопировать предложенное решение? Если не сложно.
15 acsent
 
25.06.14
16:16
Тут рекомедуют не атрибуты, а элементы создавать. Если конечно есть возможность менять формат хмл
16 Fragster
 
гуру
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
17 Night_Wolf
 
25.06.14
16:17
(15) Формат для файла к сожалению тоже жестко задан. Федеральным законом.
18 Fragster
 
гуру
25.06.14
16:17
т.е. болжна только в CDATA когда в секции есть строка "]]>" экранироваться, а иначе - по желанию. парсеры давиться не должны.
19 Fragster
 
гуру
25.06.14
16:18
(17) попробуй скормить так
20 Fragster
 
гуру
25.06.14
16:18
оттуда же: Что еще интересно - пока что на получающиеся таким образом файлы еще никто из программ не ругался, все молча кушают и не давятся. :) Да и сам я это случайно заметил.
21 Fragster
 
гуру
25.06.14
16:21
а вот это уже бага:

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

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

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