|
|
#1 |
|
Участник
|
Граждане, есть ли разумные люди, которые могли бы посоветовать что-то по такому вопросу?
Ситуация. Есть структура файла: <?xml version="1.0" encoding="UTF-16" standalone="no" ?> <Example></Example> ... всё это дело лепится хml-портом и одним кодеюнитом Можно-ли штатными средствами вставить ещё одну строку так (см. ниже) используя триггеры xml-порта: <?xml version="1.0" encoding="UTF-16" standalone="no" ?> <? .... пример строки.....?> <Example></Example> ... Или это невозможно сделать в принципе и надо лезть в XML Dom и не использовать xml-порт? |
|
|
|
|
#2 |
|
Участник
|
всем спасибо, я допёр.
|
|
|
|
|
#3 |
|
Участник
|
__________________
<span style="color:#000000">Я не волшебник, я только учусь...</span> |
|
|
|
|
#4 |
|
Участник
|
|
|
|
|
|
#5 |
|
Участник
|
|
|
|
|
|
#6 |
|
Участник
|
Всё может быть.
Всмысле? Блин. Прошу же опиши вкратце как разобрался с этим. Форум читает довольно много народу, в т.ч. и новичков вроде меня, которым интересно знать решение тех или иных простейших проблем... опыта-то ак-то нужно набираться =) Так что, о великий сенсей, поведай нам тайну своего решения =)
__________________
<span style="color:#000000">Я не волшебник, я только учусь...</span> |
|
|
|
|
#7 |
|
Участник
|
|
|
|
|
|
#8 |
|
Участник
|
айсман вихади, да!?
|
|
|
|
|
#9 |
|
Участник
|
Цитата:
|
|
|
|
|
#10 |
|
Участник
|
Злой ты, Иван
![]() А кто по полочкам разложит? Разжует и в рот положит?
__________________
С уваженем, rootadmin |
|
|
|
|
#11 |
|
Участник
|
|
|
|
|
|
#12 |
|
Участник
|
|
|
|
|
|
#13 |
|
Участник
|
уважаемый Иван33, я не буду приводить список Ваших вопросов, но ответы Вы получали (ну кроме возможно ЛОТУСа конечно)!
|
|
|
|
|
#14 |
|
Участник
|
уважаемый красный лис, в теме про лотус, атвэчал сам. если вы имеете ввиду "получение ответов", то воспользоваться функцией "все сообщения пользователя" и получить мои сообщения по моему мнению недостаточно. если вы это сделали, и посмотрели на опцию "Ответы: ..." (нижняя строка), то опция вводит в заблуждение. технической статистикой форума, уважаемый красный лис, вы меня на засудите. да и неплохо было бы ознакомить публику с методом эээ вашего выведения меня на "чистую воду". ну и встречный вопрос, пачэму не ответили в этой теме первым? просмотров у темы за 800, а никто из гуру и несоизволил и если вы "опытный товарищ в делах навижен", то тем более недоумение растёт.
|
|
|
|
|
#15 |
|
Участник
|
|
|
|
|
|
#16 |
|
MCTS
|
Для utf-8 легко:
Код:
myFile.CREATETEMPFILE;
myFile.CREATEOUTSTREAM(myOutStream);
XMLPORT.EXPORT(MyXMLPort,myOutStream);
myFile.CREATEINSTREAM(myInStream);
bigText.READ(MyInStream);
myFile.CLOSE;
bigtext.ADDTEXT('<?mytag?>',55);
IF EXISTS('C:\123.xml') THEN
ERASE('C:\123.xml');
myFile.CREATE('C:\123.xml');
myFile.CREATEOUTSTREAM(myOutStream);
bigText.WRITE(myOutStream);
myFile.CLOSE();Надо признать, что с наскоку перекодировка не далась. |
|
|
|
|
#17 |
|
Участник
|
Цитата:
Сообщение от apanko
Для utf-8 легко:
Код:
myFile.CREATETEMPFILE;
myFile.CREATEOUTSTREAM(myOutStream);
XMLPORT.EXPORT(MyXMLPort,myOutStream);
myFile.CREATEINSTREAM(myInStream);
bigText.READ(MyInStream);
myFile.CLOSE;
bigtext.ADDTEXT('<?mytag?>',55);
IF EXISTS('C:\123.xml') THEN
ERASE('C:\123.xml');
myFile.CREATE('C:\123.xml');
myFile.CREATEOUTSTREAM(myOutStream);
bigText.WRITE(myOutStream);
myFile.CLOSE();Надо признать, что с наскоку перекодировка не далась. (а то сразу судить, чай не в Нюрнберге живём), ну а структуру эксемеля итоговую чего не дали?вы реализовали классический случай, когда эксемель делается с нуля. но есть ещё другой клинический, когда есть эксемель сделанный xml-портом, или сторонним производителем (проблема кодировки не возникает). |
|
|
|
|
#18 |
|
MCTS
|
Структура итогового файла такая (как в вашем первом посте):
Цитата:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<?MyTag?> <Example></Example> Я предложил способ добавления тега к хмл-файлу создаваемому хмл-портом. Шаги: * Выгружаем хмл-структуру во что-нибудь, поддерживающее потоки (выгружаем ХМЛ-портом). Я выгружал во временный файл. * Загружаем хмл-структуру из временного файла в бигтекст. * С помощью фукнции аддтекст добавляем в нужное (нужное место было определено экспериментальным путем) наш текст: '<?....?>' * Выгружаем отредактированную хмл-структуру из бигтекста в файл (уже настоящий, а не временный). Точно также можно править любые хмл-файлы, достаточно открыть файл, создать поток и запихнуть этот поток в бигтекст. Далее АддТекст(нужный текст, нужное место) и отправка модифицированного потока обратно. Ограничение, как я сказал UTF-16 кодировка. Но думаю ее тоже можно победить. |
|
|
|
|
#19 |
|
MCTS
|
UTF-16 удалось победить примитивным способом.
Код:
ttext2:='<?my_tag?>'; //добавляемая строка
myFileFrom.OPEN('C:\1_16.xml'); //исходный хмл-файл
myFileTo.CREATE('C:\123.xml'); //новый хмл-файл с новым тегом
iii:=0;
WHILE myFileFrom.POS<>myFileFrom.LEN DO BEGIN //читаем исходный файл по символьно.
iii+=1;
myFileFrom.READ(ch);
myFileTo.WRITE(ch); //и переписываем в новый.
IF iii=116 THEN //пока не дойдем до нужного места (опять же определено эксперементально)
FOR ttt:=1 to strlen(ttext2) DO BEGIN
myFileTo.WRITE(ttext2[ttt]); //пишем новые символы из строки
myFileTo.WRITE(ch0); //к каждому символу добавляем символ ch0:=0;
END;
END;
myFileTo.CLOSE();
myFileFrom.CLOSE();PS. добавлять ноль нужно для латиницы, что добавлять для русских символов - не знаю, нужно смотреть. |
|
|
|
|
#20 |
|
Участник
|
Цитата:
Сообщение от apanko
Структура итогового файла такая (как в вашем первом посте):
Что вы имеете в виду: "хмл делается с нуля"?. Я предложил способ добавления тега к хмл-файлу создаваемому хмл-портом. Шаги: * Выгружаем хмл-структуру во что-нибудь, поддерживающее потоки (выгружаем ХМЛ-портом). Я выгружал во временный файл. * Загружаем хмл-структуру из временного файла в бигтекст. * С помощью фукнции аддтекст добавляем в нужное (нужное место было определено экспериментальным путем) наш текст: '<?....?>' * Выгружаем отредактированную хмл-структуру из бигтекста в файл (уже настоящий, а не временный). Точно также можно править любые хмл-файлы, достаточно открыть файл, создать поток и запихнуть этот поток в бигтекст. Далее АддТекст(нужный текст, нужное место) и отправка модифицированного потока обратно. Ограничение, как я сказал UTF-16 кодировка. Но думаю ее тоже можно победить. на бывшем месте работы над проблемой бились "лучшие умы", но не добились решения. сначала пытались вмешаться в работу эксемель порта на той стадии, где появляется самая первая строка эксемель-файла (первая инструкция процессору - Processing Instruction) и далее начинается самый первый тэг (Root) - корень. мутили что-то с потоками, там передача его туда сюда, триггерами эксемель порта, но ничего не получилось, вставляемая строка появлялась то вначале вообще всего файла, то в конце всего файла и т. п. в связи с этим появилось подозрение, что мс спецом это сделало (по моему мнению, казалось бы необходимая операция и самая простая). ну, а дальше бились над вариантом, который работает у вас, в итоге тоже не смогли. пришлось разбираться мне в XML DOM и в преломлении к Navision. "Что вы имеете в виду: "хмл делается с нуля"?." - когда структура файла делается постепенно. в контексте использования порта - добавка нужной строки в нужном месте не после того, как уже будет сформирован эксемель этим портом полностью, а постепенно (1 строка, вторая, третья - т. е., есть возможность добавлять, либо не добавлять строку, в зависимости от определённых условий). |
|
|