Имя: Пароль:
1C
1С v8
Непонятка с тегами XML
,
0 simol
 
04.09.12
19:34
Добрый день!

Скажите, в моем файле ХМL есть тег:
<Значение />
Так как значение не заполнено, что по идее тождественно
<Значение></Значение>

1С-ка при чтении xml читает этот (<Значение /> ) и говорит, что это Начало элемента и соответственно конец элемента не находится, так как этот тег сам же и является закрытием.

Как при чтении xml определить что это тег вида <Значение /> (открытие и закрытие, пустое значение)

К
1 Mafoni
 
04.09.12
19:37
а что мешает писать два тега <Значение></Значение> и забыть об этой проблеме ? или xml из внешней какой-то программы выливается ?
2 andrewks
 
04.09.12
19:45
пробел лишний
3 simol
 
04.09.12
19:46
(1)Из внешней
(2)
Для обозначения элемента без содержания, называемого пустым элементом, необходимо применять особую форму записи, состоящую из одного тега, в котором после имени элемента ставится косая черта. Если в DTD элемент не объявлен пустым, но в документе он не имеет содержания, для него допускается применять следующие (три) формы записи. Например:

<foo></foo>
<foo />
<foo/>
4 Wobland
 
04.09.12
19:47
(3) мало ли что там себе думают разработчики стандарта XML... удалять пробел пробовал?
5 andrewks
 
04.09.12
19:48
(4) +100  

мнения 1С и разработчиков стандартов могут не совпадать. 1С за мнения разработчиков стандартов ответственности не несёт. :-)
6 andrewks
 
04.09.12
19:49
огнелис тоже против пробела
7 andrewks
 
04.09.12
19:50
а, не, вру, огнелис скушал
8 Mafoni
 
04.09.12
19:53
дык если у него внешняя приблуда формирует xml то пробел он может и не убрать !
9 Wobland
 
04.09.12
19:53
(8) хотя бы диагностируем
10 Mafoni
 
04.09.12
19:57
(9) - прав на все сто! Эй ТС - ты еще тут - послушай умного человека (4) и сделай как он говорит.
11 simol
 
04.09.12
20:00
(8)Так и есть
(10)Как я его уберу?
   ОбъектXML = Новый ЧтениеXML;
   ОбъектXML.ОткрытьФайл(ИмяФайла);
       Пока ОбъектXML.Прочитать() Цикл
12 simol
 
04.09.12
20:00
ТипУзла = ОбъектXML.ТипУзла;
           Если ТипУзла = НачалоЭлемента
13 Wobland
 
04.09.12
20:01
(11) научить редактировать файлы? но дорого?
14 Mafoni
 
04.09.12
20:02
открываеш xml в блокноте
ишешь тот самый грешный тег <Значение />
убераеш оттудова " " ( это пробел)
записываеш файло.
Пробуеш свою обработку еще раз.

(13) извини - сегодня демпингую - учу без оплаты :)
15 Wobland
 
04.09.12
20:04
(14) я б лучше научил ;)
к блокнотам стойкая неприязнь
16 simol
 
04.09.12
20:06
Так это не разовая загрузка, это обмен данными со сторонними поставщиками.
Парсить из-за пробела это не по нашему.
17 Wobland
 
04.09.12
20:06
(16) -> (9)
18 simol
 
04.09.12
20:06
(14)Ты пробовал 20 метров XML открыть в блокноте?
19 Mafoni
 
04.09.12
20:07
(16) - ты для начала проверь в этом ли проблема ! а потом думай что с ней делать !
20 simol
 
04.09.12
20:07
(17)Вот вопрос темы в этом и состоит КАК?

А так получается
как диагностировать? берешь и диагностируешь.
21 Wobland
 
04.09.12
20:07
(19) во!
да и "парсить" там на две минуты делов. СтрЗаменить(" /", "/")
22 Wobland
 
04.09.12
20:08
(20) РУКАМИ!!
23 simol
 
04.09.12
20:08
Вроде и не пятница. а стебетесь.
24 simol
 
04.09.12
20:09
(19)Я и проверил и вот и пишу, что на <Значение />  1С говорит, что тег открытия, а не пустой тег.
25 Wobland
 
04.09.12
20:09
(23) вынуждаешь. лично я ничего шуточного доселе не имел в виду
26 Mafoni
 
04.09.12
20:09
(18) - ей богу как маленький - открой в каком-нибуть редакторе - который позволяет редактировать такие большие файлы xml. Если память не изменяет то FAR - справляется с этой задачей.
27 simol
 
04.09.12
20:10
(26) см (16)
28 andrewks
 
04.09.12
20:13
ну что ж, давайте пофилософствуем на тему пробелов в XML. думаю, они там лишние, ибо пустота не должна обозначаться пробелами, ведь в православном SQL пустота тоже не обозначается пробелами, а для этого используется обозначение NULL.
29 Wobland
 
04.09.12
20:13
(27) мужик, ты попробуй, а потом возвращайся, а? нам лениво у себя создавать такие ситуации и проверять
30 Wobland
 
04.09.12
20:15
(28) оффтопик, второй раз за сегодня. поубивал бы за "ПустаяСтрока(стр)=0" ;)
31 simol
 
04.09.12
20:16
Жаль не могу вас забанить, тролли вы.

Проблему я то решил.

Если вы по каждому поводу с проблемой не раздираетесь, а удаляете пробелы, то мне же лучше.
32 Wobland
 
04.09.12
20:16
(31) на здоровье
33 andrewks
 
04.09.12
20:19
неблагодарные. помогаешь им тут, время тратишь, а они взамен - пшикают и ругаются.
34 Fragster
 
гуру
04.09.12
20:20
Объект = ФабрикаXDTO.Прочитать(ЧтениеXML) и все, не надо изголяться...
35 simol
 
04.09.12
20:21
Решение следующее
Обработка ЗагрузкаДанныхCommerceML
Процедура ПрочитатьФайлXML

Вместо

               ПозицияРазделителя = Найти(ПолноеИмяУровня, "_");
               Если ПозицияРазделителя Тогда
                   ПолноеИмяУровня = Сред(ПолноеИмяУровня, ПозицияРазделителя + 1);
               Иначе
                   Прервать;
               КонецЕсли;

Написал

               ИмяЗакрываемогоТега = ОбъектXML.ЛокальноеИмя;
               ПозицияРазделителя = Найти(ПолноеИмяУровня, "_");
               Пока Лев(ПолноеИмяУровня, ПозицияРазделителя - 1) <> ИмяЗакрываемогоТега И ПозицияРазделителя > 0 Цикл
                   ПолноеИмяУровня = Сред(ПолноеИмяУровня, ПозицияРазделителя + 1);
                   ПозицияРазделителя = Найти(ПолноеИмяУровня, "_");
               КонецЦикла;
               ПолноеИмяУровня = Сред(ПолноеИмяУровня, ПозицияРазделителя + 1);

36 Wobland
 
04.09.12
20:21
37 simol
 
04.09.12
20:21
(34)Спасибо
38 Wobland
 
04.09.12
20:22
(35) у кого-то код не работает, а мы крайние
39 andrewks
 
04.09.12
20:24
(35) что это?
40 andrewks
 
04.09.12
20:24
(36) угу, вот что фотки животворящие делают
41 Wobland
 
04.09.12
20:25
и даже в книгу знаний добавил..
42 Wobland
 
04.09.12
20:25
+(41) тогда уж (0) и (35)
43 simol
 
04.09.12
20:26
(42)Это и добавил. просто вы же и ломаете
44 Wobland
 
04.09.12
20:27
(43) у меня галки почти везде
45 simol
 
04.09.12
20:30
(43)Так работает, но это если с нуля переписать загрузку.
46 Wobland
 
04.09.12
20:32
(45) у нас скоро полночь, могу судить нетрезво. я так и не увидел соответствия решению в (35) заявленной проблеме в (0)
47 andrewks
 
04.09.12
20:33
короче, спешу доложить: только что проверил, ЧтениеXML корректно читает все три варианта. так что Нуралиев белый и пушистый. а (35) - извините, я не понял, что там написано
48 Wobland
 
04.09.12
20:35
(47) -> (38), уже понятно ;)
49 simol
 
04.09.12
20:35
(47) Он читает, но если определить тип узла, то будет "Начало элемента". И дальше узла, его закрывающего уже не будет. Было бы разумней. если бы тип узла был не "Начало элемента", а "Пустой узел"
50 andrewks
 
04.09.12
20:36
полтинник постов ни о чём. занавес
51 andrewks
 
04.09.12
20:37
(49) "И дальше узла, его закрывающего уже не будет"  будет, и даже есть. но тебя, я вижу, не убедить
52 Wobland
 
04.09.12
20:39
(50) поддерживаю
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший