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

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

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

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


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

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

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

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
5 AaNnDdRrEeYy
 
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
9 SUA
 
10.02.14
16:51
об.shop.categories.category[0].ТекстовоеСодержимое
10 SUA
 
10.02.14
16:51
так не?
11 AaNnDdRrEeYy
 
10.02.14
16:54
(7) самый корневой тип, т.е тип самого верхнего элемента.

без указания типа XDTO может прочитать любой файл xml, но как он его прочитает это уже другой вопрос. в одном случае у тебя будет CписокXDTO в другом ОбъектXDTO. с указанием типа всегда одинаковый объект.
12 ВаликТР
 
10.02.14
16:54
(10) поле объекта ТекстовоеСодержимое не обнаружено
13 Serginio1
 
10.02.14
16:55
Вполне возмоно, что внутри он хранить ДокументDOM и к нему обращается
14 AaNnDdRrEeYy
 
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 не нужно.
16 Serginio1
 
10.02.14
17:17
(14) Он его как anyType читает.
(15) Можешь даже удалить Объект.category[0].Сбросить("id");

Но для того что бы добраться до Фотоаппараты тебе нужно, чтобы свойство category было строкой, а не объектомXDTO.
17 ВаликТР
 
10.02.14
17:32
(16) Но если оно будет строкой, тогда я не смогу в него добавить атрибуты, так?
18 Serginio1
 
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>
21 Serginio1
 
10.02.14
18:06
Самый простой вариант это чтениеXML и записьXML
Пожешь построительDOM

v8: Помогите с DOM, немогу понять как выгружать узел
22 Serginio1
 
10.02.14
18:20
23 DS
 
10.02.14
18:20
(20) DOM + XPath
24 Serginio1
 
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>
27 DS
 
10.02.14
20:01
Все зависит от конкретной задачи. Судя по (19) и (20) есть запрос и есть конкретная структура/формат/схема файла.
Берем ДОМ, ищем нужный узел (ВычислитьВыражениеXPath, ПолучитьЭлементыПоИмени ...), добавляем в цикле дочерние узлы с нужными данными и атрибутами (СоздатьЭлемент, ТекстовоеСодержимое, УстановитьАтрибут, ДобавитьДочерний ...).
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс