|
как читать XML блоками? | ☑ | ||
---|---|---|---|---|
0
Помогите
17.04.12
✎
12:20
|
Как читать XML блоками? Тоесть не по узлам как через чтениеXML, а прочитать целиком основной блок, потом из этого блока читать подблоки и так делее рекурсивно?
|
|||
1
Serginio1
17.04.12
✎
12:22
|
ПостроительDOM ?
|
|||
2
pumbaEO
17.04.12
✎
12:22
|
Как бы ты не читал, блоками, не блоками, а чтение файла все равно будет последовательно. Что ты хочешь выиграть от чтения блоками.
|
|||
3
acsent
17.04.12
✎
12:23
|
либо узлами либо весь файл сразу
|
|||
4
GenV
17.04.12
✎
12:25
|
3+ можно часть узлов пропускать сразу через ЧтениеXML.Пропустить()
|
|||
5
acsent
17.04.12
✎
12:28
|
(4) пропустить все равно читает файл, только результат не возвращает
|
|||
6
GenV
17.04.12
✎
12:29
|
(5) Конечно. Только шустрее, чем программно пропуск блока обрабатывать.
|
|||
7
Помогите
17.04.12
✎
12:32
|
(1) Вроде оно. Делаю. Жаль примера нет. Но ничего.
|
|||
8
Serginio1
17.04.12
✎
12:35
|
Процедура ВывестиУзелДом(Док,Отступ)
Если Док.ЕстьАтрибуты() Тогда Атрибуты=Док.Атрибуты; Для каждого Стр из Атрибуты Цикл Сообщить(Отступ+"Атрибут "+Стр.Имя+" "+Стр.Значение); // ВывестиУзелДом(Стр,Отступ+" ") КонецЦикла; КонецЕсли; Для каждого Узел из Док.ДочерниеУзлы Цикл Сообщить(Отступ+Узел.ТипУзла+" "+Узел.ИмяУзла); Если Узел.ТипУзла=ТипУзлаDOM.Элемент Тогда ВывестиУзелДом(Узел,Отступ+" ") ИначеЕсли Узел.ТипУзла=ТипУзлаDOM.Текст Тогда Сообщить(Узел.ТекстовоеСодержимое); Иначе Сообщить("Не найден узел "+Узел.ТипУзла); КонецЕсли; Сообщить(Отступ+"КонецУзла"+" "+Узел.ИмяУзла); КонецЦикла; КонецПроцедуры Функция ПрочитатьДОМСтрока(Строка) Чтение= новый ЧтениеXML; Чтение.УстановитьСтроку(Строка); Построитель=новый ПостроительDOM; Док=Построитель.Прочитать(Чтение); SSDLNamespace="http://schemas.microsoft.com/ado/2009/02/edm/ssdl"; CSDLNamespace = "http://schemas.microsoft.com/ado/2008/09/edm"; MSLNamespace = "http://schemas.microsoft.com/ado/2008/09/mapping/cs"; Пространства=Док.ПолучитьЭлементПоИдентификатору("Edmx"); //Атрибуты.ПолучитьИменованныйЭлемент("Name") Контейнер=Док.ПолучитьЭлементыПоИмени(SSDLNamespace,"EntityContainer"); Для каждого узел из Контейнер Цикл Если узел.URIПространстваИмен=SSDLNamespace Тогда // ВывестиУзелДом(узел,""); ИначеЕсли узел.URIПространстваИмен=CSDLNamespace Тогда // ВывестиУзелДом(узел,""); // ВывестиNavigationProperty(узел,CSDLNamespace); // ВывестиАссоциации(узел,CSDLNamespace) КонецЕсли; КонецЦикла; Контейнер=Док.ПолучитьЭлементыПоИмени(CSDLNamespace,"EntityType"); Для каждого узел из Контейнер Цикл Если узел.URIПространстваИмен=CSDLNamespace Тогда //ВывестиАссоциации2(Док,CSDLNamespace); КонецЕсли; КонецЦикла; Контейнер=Док.ПолучитьЭлементыПоИмени(MSLNamespace,"EntityContainerMapping"); Для каждого узел из Контейнер Цикл Если узел.URIПространстваИмен=MSLNamespace Тогда // ВывестиУзелДом(узел,""); КонецЕсли; КонецЦикла; Контейнер=Док.ПолучитьЭлементыПоИмени("","ConceptualModels"); Для каждого узел из Контейнер Цикл // Если узел.URIПространстваИмен=CSDLNamespace Тогда // ВывестиУзелДом(узел,""); ВывестиNavigationProperty(узел,CSDLNamespace); // КонецЕсли; КонецЦикла; Возврат ""; Отступ=""; Если Док.ЕстьАтрибуты() Тогда Атрибуты=Док.Атрибуты; Для каждого Стр из Атрибуты Цикл Сообщить(Стр.Имя+" "+Стр.Значение); КонецЦикла; КонецЕсли; Для каждого Узел из Док.ДочерниеУзлы Цикл Сообщить(Отступ+Узел.ТипУзла+" "+Узел.ИмяУзла); Если Узел.ТипУзла=ТипУзлаDOM.Элемент Тогда ВывестиУзелДом(Узел,Отступ+" ") ИначеЕсли Узел.ТипУзла=ТипУзлаDOM.Текст Тогда Иначе Сообщить("Не найден узел "+Узел.ТипУзла); КонецЕсли; Сообщить(Отступ+"КонецУзла"+" "+Узел.ИмяУзла); КонецЦикла; КонецФункции |
|||
9
Serginio1
17.04.12
✎
12:39
|
Но там есть проблемы с ПолучитьЭлементыПоИмени
v8: Неправильно работает ДокументDOM.ПолучитьЭлементыПоИмени |
|||
10
Помогите
17.04.12
✎
13:02
|
Serginio1, то что надо, спасибо!
|
|||
11
Serginio1
17.04.12
✎
13:07
|
На здоровье!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |