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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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