Имя: Пароль:
1C
1С v8
Убрать Meta
0 zfobo
 
03.11.11
10:25
<Item ID="1111" CatID="111" Name="888888" Description="<HTML><HEAD> <META content="text/html; charset=utf-8" http-equiv=Content-Type> <META name=GENERATOR content="MSHTML 8.00.6001.22945"></HEAD> <BODY>Тестовое описание не знамо чего</BODY></HTML>" artikle="0000">

Как сделать что бы он вывел просто:

<Item ID="1111" CatID="111" Name="888888" Description="<Тестовое описание не знамо чего" artikle="0000">
1 izekia
 
03.11.11
10:26
регулярное выражение
2 zfobo
 
03.11.11
10:30
А другие варианты есть?
3 izekia
 
03.11.11
10:31
(2) есть
4 zfobo
 
03.11.11
10:32
Нужно выгрузить в xml, и там Description не должен писать мета данные
5 izekia
 
03.11.11
10:32
Найти("<META")
Найти(">")
6 izekia
 
03.11.11
10:33
можно хслт преобразованием, как тебе больше нравится
7 zfobo
 
03.11.11
10:33
хслт преобразование эт что?
8 izekia
 
03.11.11
10:34
не, хслт преобразование здесь не очень, так как это аттрибут, лучше регуляркой
9 zfobo
 
03.11.11
10:34
Ок, спасибо, щяс разберусь
10 izekia
 
03.11.11
10:39
в твоем случае шаблон выглядит так:
(.+Description\s*=\s*").*<BODY>(.*)</\s*BODY>[^"]*(.*)
11 zfobo
 
03.11.11
10:44
Ага, над как нить через Description (descr) сделать убрать там всякую хрень
12 izekia
 
03.11.11
10:51
(11) шаблон в (10)
13 zfobo
 
03.11.11
10:53
Эм глупый вопрос но как реализовать его в коде о_О
14 andrewks
 
03.11.11
10:54
(0) а что на выходе надо получить? у тебя некорректная структура получается
15 izekia
 
03.11.11
10:54
(14) ну там лишняя угловая скобочка, я в своем фарианте пофиксил
16 zfobo
 
03.11.11
10:56
ЗаписьXML.ЗаписатьНачалоЭлемента("Items");    
   Для Каждого ТекСтрока Из Выборка Цикл
   ЗаписьXML.ЗаписатьНачалоЭлемента("Item");
   ЗаписьXML.ЗаписатьАтрибут("ID", ЗаменаПробелаВЧислах(ТекСтрока.***));
   ЗаписьXML.ЗаписатьАтрибут("CatID", ЗаменаПробелаВЧислах(ТекСтрока.***));
   ЗаписьXML.ЗаписатьАтрибут("Name", ТекСтрока.***);
   ЗаписьXML.ЗаписатьАтрибут("Description", ТекСтрока.***);
   ЗаписьXML.ЗаписатьАтрибут("artikle", ТекСтрока.***);

На выходе должно Быть:
<Item ID="1111" CatID="111" Name="888888" Description="Тестовое описание не знамо чего" artikle="0000">
17 izekia
 
03.11.11
11:00
тогда тебе это нужно:
.+Description\s*=\s*".*<BODY>(.*)</\s*BODY>.*
субматч 0 там забирай
а у тебя в строке может быть несколько итемов?
откуда ее вообще получаешь?
18 zfobo
 
03.11.11
11:03
Да может
ЗаписьXML.ЗаписатьАтрибут("Description",ТекСтрока.АртикулНоменклатурыОписание);

А куда это? .+Description\s*=\s*".*<BODY>(.*)</\s*BODY>.*
До этого с xml дел не имел
19 izekia
 
03.11.11
11:09
(18) хслт не прокатит тут, так как у тебя хтмл в хмл, соответственно обратимся к регулярке:
regExp = Новый COMОбъект("VBScript.RegExp");
regExp.IgnoreCase = -1;
regExp.Global = -1;
regExp.MultiLine = -1;
regExp.Pattern = ".+?Description\s*=\s*"".*?<BODY>(.*?)</\s*BODY>.*?";
matches = regExp.Execute(полученнаяСтрока);
Для инд = 0 По matches.Count - 1 Цикл
   Сообщить(matches.Item(инд).Submatches.Item(0));
КонецЦикла;
20 zfobo
 
03.11.11
11:19
о_О увидел перекрестился о_О
И куда это засунуть?
перед
ЗаписьXML.ЗаписатьАтрибут("Description", ТекСтрока.АртикулНоменклатурыОписание_В);
?
21 izekia
 
03.11.11
11:27
так, давай по порядку, сделаем процедуру, которая на входе получает строку, которая содержит один или несколько итемов и запись хмл
и соответственно обрабатывает нужным образом эту запись добавляя туда элементы

текст модуля с этой функцией выглядит примерно так:
(сейчас напишу и кину)
22 izekia
 
03.11.11
11:38
Перем _RegExp;

Процедура ДобавитьЭлементыИзСтроки(строка, записьХМЛ)
   matches = _RegExp.Execute(строка);
   Для инд = 0 По matches.Count - 1 Цикл
       записьХМЛ.ЗаписатьНачалоЭлемента("Item");
       записьХМЛ.ЗаписатьАтрибут("ID", ЗаменаПробелаВЧислах(matches.Item(инд).Submatches.Item(0)));
       записьХМЛ.ЗаписатьАтрибут("CatID", ЗаменаПробелаВЧислах(matches.Item(инд).Submatches.Item(1)));
       записьХМЛ.ЗаписатьАтрибут("Name", matches.Item(инд).Submatches.Item(2));
       записьХМЛ.ЗаписатьАтрибут("Description", matches.Item(инд).Submatches.Item(3));
       записьХМЛ.ЗаписатьАтрибут("artikle", matches.Item(инд).Submatches.Item(4));
       записьХМЛ.ЗаписатьКонецЭлемента();
   КонецЦикла;
КонецПроцедуры


_RegExp = Новый COMОбъект("VBScript.RegExp");
_RegExp.IgnoreCase = -1;
_RegExp.Global = -1;
_RegExp.MultiLine = -1;
_RegExp.Pattern = ".+?ID=""([^""]*)"".+?CatID=""([^""]*)"".+?Name=""([^""]*)"".+?Description\s*=\s*"".*?<BODY>(.*?)</\s*BODY>[^""]*"".+?artikle=""([^""]*)"".*?";
23 izekia
 
03.11.11
11:39
конечно немного уязвимо к изменению порядка и лишним пробелам, но дальше уже сам осваивай регулярныые выражения)
24 zfobo
 
03.11.11
11:58
о_О Ок учту, спс =)