Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как добраться до элемента XDTO

Как добраться до элемента XDTO
Я
   ВаликТР
 
10.02.14 - 16:12
Всем доброго!
Уже поднимал этот вопрос, но не решилос.
Есть XML
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; date="Дата">
    <shop xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">;
        <categories>
            <category id="00000001">Фотоаппараты</category>
            ...
        </categories>
    </shop>
</catalog>

Читаю его
об = ФабрикаXDTO.ПрочитатьXML(Чтение);

Далее вывожу в отладчике
об.shop.categories.category - СписокXDTO
об.shop.categories.category[0] - ОбъектXDTO
id = "0000001"

А где у него прячется "Фотоаппараты"? Как его получить?
То что оно там где-то зарыто - сто процентов, потому что при записи в XML все выводится. И Текст и атрибут.
Спасибо!
   Maxus43
 
1 - 10.02.14 - 16:16
где в файле фотоаппараты то?
   Maxus43
 
2 - 10.02.14 - 16:20
в "об.shop.categories.category[0]" - только id?
   ВаликТР
 
3 - 10.02.14 - 16:23
(2) да
   AaNnDdRrEeYy
 
4 - 10.02.14 - 16:26
ФабрикаXDTO (XDTOFactory)
ПрочитатьXML (ReadXML)
Синтаксис:

ПрочитатьXML(<ЧтениеXML>, <Тип>)
Параметры:

<ЧтениеXML> (обязательный)

Тип: ЧтениеУзловDOM, ЧтениеFastInfoset, ЧтениеXML.
Объект чтения XML. 
<Тип> (необязательный)
второй параметр передай


Тип: ТипЗначенияXDTO; ТипОбъектаXDTO. 
Тип элемента данных XDTO. Если тип не указан, то будет сделана попытка определить тип данных по текущему состоянию объекта ЧтениеXML.
Описание:

Читает элемент данных XDTO указанного типа из объекта чтения XML.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
   AaNnDdRrEeYy
 
5 - 10.02.14 - 16:26
(4)+ второй параметр надо передать в чтение
   ВаликТР
 
6 - 10.02.14 - 16:39
(5) И какой же тип туда вставить? если можно кодом?
Ведь выгружает и без второго параметра с "Фотоаппаратами". Где-то же оно его хранит...
   ВаликТР
 
7 - 10.02.14 - 16:40
(4) "Читает элемент данных XDTO"
Я читаю не currency, а весь файл. Какой тип?
   ВаликТР
 
8 - 10.02.14 - 16:41
(7) вернее не category
   SUA
 
9 - 10.02.14 - 16:51
об.shop.categories.category[0].ТекстовоеСодержимое
   SUA
 
10 - 10.02.14 - 16:51
так не?
   AaNnDdRrEeYy
 
11 - 10.02.14 - 16:54
(7) самый корневой тип, т.е тип самого верхнего элемента.

без указания типа XDTO может прочитать любой файл xml, но как он его прочитает это уже другой вопрос. в одном случае у тебя будет CписокXDTO в другом ОбъектXDTO. с указанием типа всегда одинаковый объект.
   ВаликТР
 
12 - 10.02.14 - 16:54
(10) поле объекта ТекстовоеСодержимое не обнаружено
   Serginio1
 
13 - 10.02.14 - 16:55
Вполне возмоно, что внутри он хранить ДокументDOM и к нему обращается
   AaNnDdRrEeYy
 
14 - 10.02.14 - 16:55
xsd файл выложи
   ВаликТР
 
15 - 10.02.14 - 17:04
(14) нет его.
Ведь могу же менять 

об.shop.categories.category[0].id = "00003";


в результате выводит
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; date="Дата">
    <shop xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">;
        <categories>
            <category id="00003">Фотоаппараты</category>
        </categories>
        ...
    </shop>
</catalog>

и xsd не нужно.
   Serginio1
 
16 - 10.02.14 - 17:17
(14) Он его как anyType читает.
(15) Можешь даже удалить Объект.category[0].Сбросить("id");

Но для того что бы добраться до Фотоаппараты тебе нужно, чтобы свойство category было строкой, а не объектомXDTO.
   ВаликТР
 
17 - 10.02.14 - 17:32
(16) Но если оно будет строкой, тогда я не смогу в него добавить атрибуты, так?
   Serginio1
 
18 - 10.02.14 - 17:47
Угу
Если бы было типа

<category id="00003">
  <Товар>Фотоаппараты</Товар>
</category>

То все прекрасно бы читалось.
   ВаликТР
 
19 - 10.02.14 - 18:00
(18) Мне капец. Не знаю, у кого помощи просить. Может вы мне поможете. Уже заплатить готов.
Задача такая.
1. Есть результат запроса.
2. Есть XML файл, где в атрибутах содержатся имена полей запроса.

Нужно пройти по строкам запроса и добавить элементы, заполнив атрибуты значениями полей.
   ВаликТР
 
20 - 10.02.14 - 18:06
т.е вот это

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="Дата">
    <shop>                
        <currencies>            
            <currency id="КодВалюты" rate="Курс" plus="Плюс"/>        
        </currencies>            
        <categories>
            <category id="КодКатегории">НаименованиеКатегории</category>
        </categories>
        <local_delivery_cost>300</local_delivery_cost>            
        <offers>            
            <offer id="КодТовара" type="vendor.model" bid="13" cbid="20" available="true">        
                <url>http://magazin.ru/product_page.asp?pid=14344</url>;    
                <price>15000</price>    
            </offer>        
        </offers>
    </shop>                
</yml_catalog>    

должно превратиться в новый файл вот в это

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2006-11-30 16:46">
    <shop>                

        <currencies>            
            <currency id="RUR" rate="1" plus="0"/>        
            <currency id="USD" rate="8" plus="0"/>        
        </currencies>            
        <categories>            
            <category id="10" parentId="1">Принтеры</category>        
            <category id="100" parentId="10">Струйные принтеры</category>        
        </categories>            
        <offers>            
            <offer id="12341" type="vendor.model" bid="13" cbid="20" available="true">        
                <url>http://magazin.ru/product_page.asp?pid=14344</url>;    
                <price>15000</price>    
            </offer>        
            <offer id="12342" type="book" bid="17" available="true">        
                <url>http://magazin.ru/product_page.asp?pid=14345</url>;    
                <price>100</price>    
            </offer>        
        </offers>            
    </shop>                
</yml_catalog>
   Serginio1
 
21 - 10.02.14 - 18:06
Самый простой вариант это чтениеXML и записьXML 
Пожешь построительDOM

v8: Помогите с DOM, немогу понять как выгружать узел
   Serginio1
 
22 - 10.02.14 - 18:20
   DS
 
23 - 10.02.14 - 18:20
(20) DOM + XPath
   Serginio1
 
24 - 10.02.14 - 18:27
   ВаликТР
 
25 - 10.02.14 - 19:05
(22) (24) все перечитал и повторил. Не то.
   ВаликТР
 
26 - 10.02.14 - 19:14
Ладно, может упростить задачу.
Можно ли каким-то методом склеить ЭлементDOM
<catalog xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; date="Дата">
    <shop xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">;
        <categories>
            <category id="00003">Фотоаппараты</category>
        </categories>
    </shop>
</catalog>

С ВОТ ЭТИМ 

<catalog xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; date="Дата">
    <shop xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">;
        <categories>
            <category id="00004">Фотоаппараты</category>
        </categories>
    </shop>
</catalog>


ЧТТОБЫ В ИТОГЕ ПОЛУЧИЛОСЬ ВОТ ЭТО

<catalog xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; date="Дата">
    <shop xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">;
        <categories>
            <category id="00003">Фотоаппараты</category>
id="00004">Фотоаппараты</category>
        </categories>
    </shop>
</catalog>
   DS
 
27 - 10.02.14 - 20:01
Все зависит от конкретной задачи. Судя по (19) и (20) есть запрос и есть конкретная структура/формат/схема файла.
Берем ДОМ, ищем нужный узел (ВычислитьВыражениеXPath, ПолучитьЭлементыПоИмени ...), добавляем в цикле дочерние узлы с нужными данными и атрибутами (СоздатьЭлемент, ТекстовоеСодержимое, УстановитьАтрибут, ДобавитьДочерний ...).


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.