Текущее время: Пт, авг 01 2025, 15:01

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Ищу документацию к классу CL_XML_DOCUMENT
СообщениеДобавлено: Чт, май 14 2009, 13:12 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Всем доброго времени суток!

Столкнулся с задачей по заполнению налоговых форм через xml файлы.
Решил не мучится и загружать xml файл по "строчно" в свою табличку, а там уже сам буду
ее парсить как мне нужно.
пример того, как я хочу разобрать xml файлик
Code:
<?xml version="1.0" encoding="UTF-8" ?>                     " как одну строчку
- <fno code="200.00" version="7" documentId="100">   " как одну строчку
- <form name="form_200_00">                                    " как одну строчку
- <sheetGroup>                                                           " как одну строчку
- <sheet name="page_200_00_01">                              " как одну строчку
  <field name="appendix_quantity1" />                          " как одну строчку
  <field name="empl_1">33</field>                               " как одну строчку
  <field name="dt_final" />                                            " как одну строчку

так как xml файл идет одной сплошной срокой, то надо парсить по узлам и т.д.
тут на форуме и в инете нашел кучу ссылок на различные примеры, но они все не подходят.
сложные, запутанные и жуть как бесят (уже второй день в инете сижу по данному сабжу), Сергей Королев говорит про класс CL_XML_DOCUMENT, ок, давай с ним играться, загрузить файл в объект данного класса не проблема, а как его по узлам (моим строчкам) разобрать я не допер еще.
документации в сапе нету ни на русском ни на инглише ни на джомани :evil:
Люди добрые, дайте соломинку тонущему, где найти документашку к данному классу?

_________________
Внешность обманчива ..... , Я хороший.


Последний раз редактировалось Salmaner Ср, май 20 2009, 08:22, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT, плиз хелп !!!
СообщениеДобавлено: Чт, май 14 2009, 13:21 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Code:
 
types:
tt(255) type x.

  DATA:
  rf_ixml          TYPE REF TO if_ixml,
  it_data          TYPE standard table of tt,
  l_size           TYPE i,
  l_code           TYPE i,
  l_dir            TYPE string.

  DATA:
ERF_DOCUMENT            Type Ref To   IF_IXML_DOCUMENT,
ERF_STREAMFACTORY Type Ref To   IF_IXML_STREAM_FACTORY,
ERF_ISTREAM   Type Ref To   IF_IXML_ISTREAM,
ERF_PARSER   Type Ref To   IF_IXML_PARSER.

data:
rf_root     TYPE REF TO if_ixml_element.

  l_dir = i_dir.
  REPLACE '\\' WITH '\' INTO l_dir.

  CALL METHOD cl_gui_frontend_services=>gui_upload
    EXPORTING
      filename                = l_dir
      filetype                = 'BIN'
*     has_field_separator     = SPACE
*     header_length           = 0
*     read_by_line            = 'X'
*     dat_mode                = SPACE
*     codepage                = SPACE
*     ignore_cerr             = ABAP_TRUE
*     replacement             = '#'
*     virus_scan_profile      =
    IMPORTING
      filelength              = l_size
*     header                  =
    CHANGING
      data_tab                = it_data[]
    EXCEPTIONS
      file_open_error         = 1
      file_read_error         = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      no_authority            = 6
      unknown_error           = 7
      bad_data_format         = 8
      header_not_allowed      = 9
      separator_not_allowed   = 10
      header_too_long         = 11
      unknown_dp_error        = 12
      access_denied           = 13
      dp_out_of_memory        = 14
      disk_full               = 15
      dp_timeout              = 16
      not_supported_by_gui    = 17
      error_no_gui            = 18
      OTHERS                  = 19.

  IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    RAISE ex_error.
  ENDIF.



* cl_ixml=>create( ).
  CALL METHOD cl_ixml=>create
*   EXPORTING
*     type   = 0
    RECEIVING
      rval   = rf_ixml.


*  rf_document = rf_ixml->create_document( ).
  CALL METHOD rf_ixml->create_document
    RECEIVING
      rval = erf_document.

* rf_ixml->create_stream_factory( ).
  CALL METHOD rf_ixml->create_stream_factory
    RECEIVING
      rval = erf_streamfactory.


* rf_streamfactory->create_istream_itable( size  table ).
  CALL METHOD erf_streamfactory->create_istream_itable
    EXPORTING
      size  = l_size
      table = it_data[]
    RECEIVING
      rval  = erf_istream.

  CALL METHOD rf_ixml->create_parser
    EXPORTING
      document       = erf_document
      istream        = erf_istream
      stream_factory = erf_streamfactory
    RECEIVING
      rval           = erf_parser.


  CALL METHOD erf_parser->parse
    RECEIVING
      rval = l_code.


  CALL METHOD erf_document->get_root_element
    RECEIVING
      rval = rf_root.



думаю, теперь все ясно станет, и дальше разберетесь сами.

у IF_IXML_ELEMENT есть методы, смотрите там, все понятно.

типа
IF_IXML_NODE~GET_FIRST_CHILD
IF_IXML_NODE~GET_GID
IF_IXML_NODE~GET_HEIGHT
IF_IXML_NODE~GET_LAST_CHILD
IF_IXML_NODE~GET_NAME
IF_IXML_NODE~GET_PARENT
GET_ATTRIBUTE

итд, из названий все ясно.

Кстати, я тоже разбирал XML из программы ИС НДС и ИС ЭФНО :)

Вобщем этот пример - как вариант не с CL_XML_DOCUMENT


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT, плиз хелп !!!
СообщениеДобавлено: Чт, май 14 2009, 13:46 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Спасибо Art386, возьму на заметку.

Кстати почему нету хотябы описания к классам, как в нормальных системах? Очень недоработанная часть SAP.

_________________
Внешность обманчива ..... , Я хороший.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT, плиз хелп !!!
СообщениеДобавлено: Чт, май 14 2009, 13:51 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
Salmaner написал:
Спасибо Art386, возьму на заметку.

Кстати почему нету хотябы описания к классам, как в нормальных системах? Очень недоработанная часть SAP.

Не знаю :) у САП-а мнго чего таинственного есть.

Кстати, классы, которые я привел, позволяют очень гибко подходить к парсингу XML. Кстати, не только парсинг, а можно легко создавать свои XML-ки. Советую использовать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT, плиз хелп !!!
СообщениеДобавлено: Пт, май 15 2009, 10:09 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
На SAP Library документация не о том? http://help.sap.com/erp2005_ehp_04/help ... ameset.htm

_________________
/nex


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT, плиз хелп !!!
СообщениеДобавлено: Пт, май 15 2009, 12:08 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Bully Ну если говорить про XML- Library, то да она там есть (уже читаю).
я то искал в том же омуте про CL_XML_DOCUMENT :)

_________________
Внешность обманчива ..... , Я хороший.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT, плиз хелп !!!
СообщениеДобавлено: Пн, май 18 2009, 09:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Salmaner написал:
загрузить файл в объект данного класса не проблема, а как его по узлам (моим строчкам) разобрать я не допер еще.

Перебрать узлы там довольно просто: сначала методом GET_FIRST_NODE получаем первый узел, результат его - это объект интерфейса IF_IXML_NODE. А затем рекурсивно выполняем метод GET_NEXT этого объекта (он тоже возвращает ссылку на объект интерфейса IF_IXML_NODE) пока он не вернет пустышку. Примерно так:
Code:
DATA: xml TYPE REF TO CL_XML_DOCUMENT.
DATA: node TYPE REF TO if_ixml_node,
          node_name TYPE string.
.....
node = xml->get_first_node( ).

WHILE NOT node IS INITIAL.
  node_name = node->get_name( ).
* Обработка
  CASE node_name.
    WHEN .....
    WHEN .....
    WHEN .....
  ENDCASE.

  node = node->get_next( ).
ENDWHILE.


_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT, плиз хелп !!!
СообщениеДобавлено: Ср, май 20 2009, 07:59 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Сергей Королев мое почтение!

Большое спасибо за помощь, оказалось не совсем то, что я спрашивал.

_________________
Внешность обманчива ..... , Я хороший.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT, плиз хелп !!!
СообщениеДобавлено: Чт, май 21 2009, 16:52 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Salmaner написал:
Большое спасибо за помощь, оказалось не совсем то, что я спрашивал.

А что надо-то? CL_XML_DOCUMENT на той же библиотеке сделан, на мой взгляд, с ним кода меньше получается.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT
СообщениеДобавлено: Пт, май 22 2009, 07:08 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Ну я старался, как можно проще написать свой пост.

На данный момент, мне не нужно рабоать с xml как объектом и обрабатывать его узлы, атрибуты, значения атрибутов, данных.
Как то обсуждалось на форму (к сожалению ссылку не найду уже), что чужие форматы документов xml народ хранит в прозрачных таблицах "по строчно". И когда нужно, загружает во внутренюю таблицу и в цикле обрабатывает, т.е. банальное заполнение данными. И меня сейчас это устраивает. В принципе я так и реализовал текущее задание. Но перед тем как загружать формат xml в таблицу приходится сторонней прорамулиной его сохранять как текст. И тогда я его построчно апендом добавляю в таблицу. Потом когда надо заполнить данными формат, в цикле получаю строку и сам ее парсю с помощью find

Не могу без документашки , не хватает ни каких нервов сидиеть изучть код, чтобы въехать что и к чему, текучка на работе достает.
А так я думаю можно было бы и с помощью класса заполнять данными любой формат xml, и даже это было бы правильней.

П.С. Кстати метод
Code:
node = node->get_next( ).

не получает следующий узел. :(

_________________
Внешность обманчива ..... , Я хороший.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT
СообщениеДобавлено: Пт, май 22 2009, 09:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Salmaner написал:
П.С. Кстати метод
Code:
node = node->get_next( ).

не получает следующий узел. :(

мдааа-с... :oops: был неправ. get_next перебирает только одну ветвь. рекрусивно надо:

Code:
  CREATE OBJECT xml.

  xml->import_from_file( file ).

  node = xml->get_first_node( ).

  PERFORM browse_node USING node.

*&---------------------------------------------------------------------*
*&      Form  browse_node
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_NODE     text
*----------------------------------------------------------------------*
FORM browse_node USING value(p_node) TYPE REF TO if_ixml_node.
  DATA: child TYPE REF TO if_ixml_node,
        node_name TYPE string,
        value TYPE string.

  WHILE NOT p_node IS INITIAL.
    node_name = p_node->get_name( ).
    WRITE: / node_name.

    xml->set_attribute( NAME = '<имя атрибута>'
                                 VALUE = value
                                 node = p_node ).

    child = p_node->get_first_child( ).
    PERFORM browse_node USING child.

    p_node = p_node->get_next( ).
  ENDWHILE.

ENDFORM.                    "browse_node

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT
СообщениеДобавлено: Пт, май 22 2009, 13:03 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Ухты, как прикольно с рекурсией выглядит все.
получил кучу нодов, по количеству больше, чем в файле.
Ну думаю разберусь на наглядном примерчике.

можно еще одни вопросик ...
зачем вот это при обходе узлов(нодов)?
Code:
xml->set_attribute( NAME = '<имя атрибута>'
                                 VALUE = value
                                 node = p_node ).


пробовал его коментить, ни как не влияет на обход нодов,
если подставить имя поля, то возвращяет значение в xml файле.
я правильно понял, что это нужно при заполнении файлика данными хмл или полученя онных?

_________________
Внешность обманчива ..... , Я хороший.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT
СообщениеДобавлено: Пт, май 22 2009, 13:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Salmaner написал:
зачем вот это при обходе узлов(нодов)?
Code:
xml->set_attribute( NAME = '<имя атрибута>'
                                 VALUE = value
                                 node = p_node ).


пробовал его коментить, ни как не влияет на обход нодов,
если подставить имя поля, то возвращяет значение в xml файле.
я правильно понял, что это нужно при заполнении файлика данными хмл или полученя онных?

Да, это заполнение атрибутов узла. атрибут - это то, что дополнительно указывается внутри угловых скобок: <node attr="value">. Здесь node - имя узла, attr - имя атрибута, value - значение атрибута.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу документацию к классу CL_XML_DOCUMENT
СообщениеДобавлено: Пт, май 22 2009, 14:26 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Всем, всем спасибо за помощь!
Всем гуру, спасибо дополнительно!!!
;)

_________________
Внешность обманчива ..... , Я хороший.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB