|
Замена символов > на > | ☑ | ||
---|---|---|---|---|
0
Night_Wolf
25.06.14
✎
15:39
|
Здравствуйте!
Подскажите пожалуйста, почему при записи строки вида: <Данные><РеквизитИмя="ИмяРеквизита" Значение="ЗначениеРеквизита"/></Данные> в xml-файл через метод ЗаписьXML.ЗаписатьАтрибут() не меняет ">" на > ??? Получаю вот такую строку: <ИнфПол ТекстИнф="<Данные><РеквизитИмя="ИмяРеквизита" Значение="ЗначениеРеквизита"/></Данные>"/> Подскажите что за глюк такой непонятный? |
|||
1
Night_Wolf
25.06.14
✎
15:52
|
Неужели не знает никто? Написал простой код для проверки:
Запись = Новый ЗаписьXML; Запись.ОткрытьФайл("d:\Test_xml.xml"); Запись.ЗаписатьНачалоЭлемента("Корень"); Запись.ЗаписатьНачалоЭлемента("Проверка"); Запись.ЗаписатьАтрибут("Кавычки",""""); Запись.ЗаписатьАтрибут("Меньше","<"); Запись.ЗаписатьАтрибут("Больше",">"); Запись.ЗаписатьКонецЭлемента(); Запись.ЗаписатьКонецЭлемента(); Запись.Закрыть(); Открываю файл и вижу: <Корень> <Проверка Кавычки=""" Меньше="<" Больше=">"/> </Корень> Если руками начать переписывать ">" на ">", то потом & он меняет на "&" и получается ерунда тоже. Как быть? |
|||
2
acsent
25.06.14
✎
16:02
|
и в чем проблема то???
|
|||
3
Fragster
гуру
25.06.14
✎
16:05
|
(0) так ведь все правильно
|
|||
4
Night_Wolf
25.06.14
✎
16:06
|
Проблема в том, что надо получить
Больше="> А как это сделать? |
|||
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С не меняет символ ">" на ">"? Может надо написать что-то другое, вместо ">", чтобы получить ">"?
(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
|
не, ну можно ж "&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 ">", and MUST, for compatibility, be escaped using either ">" 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="<![CDATA[Внутри этой конструкции можно размещать любые символы, даже запрещенные(>,<,&) ]]>"/> |
|||
23
acsent
25.06.14
✎
16:26
|
Есть конечно последний вариант: формировать текст хмл вручную
|
|||
24
Night_Wolf
25.06.14
✎
16:27
|
Проблему решил - на сайте отобразилось и с ">" в файле. Но это реально бага 1С. Если есть у кого-нибудь возможность написать на поддержку эту ошибку - напишите пожалуйста. Вдруг кому будет важно.
Спасибо всем за то что откликнулись! |
|||
25
Serginio1
25.06.14
✎
16:34
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |