14 декабря, пятница 03:15
Bankir.Ru

Объявление

Свернуть
Пока нет объявлений.

Парсинг XML в RSL

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Парсинг XML в RSL

    Доброе время!

    Есть задача: Разработать макрос позволяющий обрабатывать платежи On-Line., методом "GET".
    Делаю запрос XML такого вида на RSL
    xmlRequest = ActiveX("MSXML2.ServerXMLHTTP.3.0",true);
    DomDoc = ActiveX("MSXML.DomDocument");
    DomDoc.async = false;

    server = "https://xxx.com/api-xml?xmlstring=";
    Request = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>"+
    "<request cmd=\"RENT_REQ_ACCOUNT\">" +
    "<key>Ключик</key>"+
    "<company_id>ИД компании</company_id>"+
    "<account>счет</account>"+
    "<fin_period><month>месяц</month><year>2014</year></fin_period>"+
    "<partner_tid>счет клиента</partner_tid>"+
    "<partner>ключ</partner></request>";

    xmlRequest.setOption(2)=13056; //Это чтобы не проверял сертификат

    xmlRequest.Open("GET",server + Request,false);

    xmlRequest.setRequestHeader("Content-Type","text/xml");

    xmlRequest.send();//отправка запроса

    //Получение ответа

    msgbox(xmlRequest.ResponseXML.XML);
    Получаем на выходе XML такого вида

    DomDoc.Load(xmlRequest.responseXML.XML);
    DocXML = DomDoc.documentElement;
    println(DomXML);

    /* Содержимое XML*/
    <?xml version="1.0" encoding="windows-1251"?>
    <response>
    <code>0</code>
    <state>SUCCESS</state>
    <description>Лицевой счет существует</description>
    <address>Реальный адрес</address>
    <owner>ФИО</owner>
    <billing_devices></billing_devices>
    <financial_info>
    <fin_period>
    <month>10</month>
    <year>2014</year>
    </fin_period>
    <services>
    <service>
    <name>Капитальный ремонт</name>
    <debt_sum></debt_sum>
    <debt_peni_sum>0.0</debt_peni_sum>
    <charge_sum>88.88</charge_sum>
    <charge_peni_sum>0.0</charge_peni_sum>
    <receipt_sum></receipt_sum>
    <receipt_peni_sum>0.0</receipt_peni_sum>
    <all_sum>88.88</all_sum>
    <all_peni_sum>0.0</all_peni_sum>
    </service>
    </services>
    <total>
    <debt_sum>0.00</debt_sum>
    <debt_peni_sum>0.0</debt_peni_sum>
    <charge_sum>88.88</charge_sum>
    <charge_peni_sum>0.00</charge_peni_sum>
    <receipt_sum>0.00</receipt_sum>
    <receipt_peni_sum>0.0</receipt_peni_sum>
    <all_sum>88.88</all_sum>
    <all_peni_sum>0.00</all_peni_sum>
    </total>
    </financial_info>
    <partner_tid>Счет клиента</partner_tid>
    </response>
    Необходимо сделать парсинг XML по тегам в RSL

    Делаю, но то ошибка, то не та информация.

    P.S. Танцы с бубмом уже 2-ую неделю

  • #2
    Нет?

    import rslx ;

    var ListXML = ActiveX("MSXML.DOMDocument") ;
    var node, node2, node3 ;
    var i, i2, i3 ;

    ListXML.LoadXML ("<?xml version=\"1.0\" encoding=\"windows-1251\"?> " +
    "<response> " +
    "<code>0</code> " +
    "<state>SUCCESS</state> " +
    "<description><Ёж_ўRc бз_в бгй_бвўг_в</description> " +
    "<address>__·<м-лc ·¤а_б</address> " +
    "<owner>"__</owner> " +
    "<billing_devices></billing_devices> " +
    "<financial_info> " +
    "<fin_period> " +
    "<month>10</month> " +
    "<year>2014</year> " +
    "</fin_period> " +
    "<services> " +
    "<service> " +
    "<name>_·ЇЁв·<м-лc а_┐R-в</name> " +
    "<debt_sum></debt_sum> " +
    "<debt_peni_sum>0.0</debt_peni_sum> " +
    "<charge_sum>88.88</charge_sum> " +
    "<charge_peni_sum>0.0</charge_peni_sum> " +
    "<receipt_sum></receipt_sum> " +
    "<receipt_peni_sum>0.0</receipt_peni_sum> " +
    "<all_sum>88.88</all_sum> " +
    "<all_peni_sum>0.0</all_peni_sum> " +
    "</service> " +
    "</services> " +
    "<total> " +
    "<debt_sum>0.00</debt_sum> " +
    "<debt_peni_sum>0.0</debt_peni_sum> " +
    "<charge_sum>88.88</charge_sum> " +
    "<charge_peni_sum>0.00</charge_peni_sum> " +
    "<receipt_sum>0.00</receipt_sum> " +
    "<receipt_peni_sum>0.0</receipt_peni_sum> " +
    "<all_sum>88.88</all_sum> " +
    "<all_peni_sum>0.00</all_peni_sum> " +
    "</total> " +
    "</financial_info> " +
    "<partner_tid>'з_в Є<Ё_-в·</partner_tid> " +
    "</response>") ;



    node = ListXML.ChildNodes(1) ;
    if (node.NodeName == "response")
    i = 0 ;
    while (i < node.ChildNodes.Length)
    if (node.ChildNodes(i).NodeName == "partner_tid") println (node.ChildNodes(i).Text) ;
    elif (node.ChildNodes(i).NodeName == "financial_info")
    node2 = node.ChildNodes(i) ;
    i2 = 0 ;
    while (i2 < node2.ChildNodes.Length)
    if (node2.ChildNodes(i2).NodeName == "total")
    node3 = node2.ChildNodes(i2) ;
    i3 = 0 ;
    while (i3 < node3.ChildNodes.Length)
    if (node3.ChildNodes(i3).NodeName == "charge_sum") println (node3.ChildNodes(i3).Text) ; end ;
    i3 = i3 + 1 ;
    end ;
    end ;
    i2 = i2 + 1 ;
    end ;
    end ;
    i = i + 1 ;
    end ;
    end ;
    VP

    Комментарий


    • #3
      Спасибо огромное.
      Везде написано расплывчато, мало понятное и большинство комбинаций не прокатывает. На русском вообще мало.
      А тут все как на ладони, все понятно. Информация ценная.
      Спасибо!!!

      Комментарий


      • #4
        Еще нашел способ, как получать инфу по тегам в XML, может кому пригодиться:
        DomXML = xmlRequest.ResponseXML.DocumentElement;
        PrintLn(DomXml.GetElementsByTagName("month").Item(0).Text ); //Это показывает содержимое тега month
        PrintLn(DomXml.GetElementsByTagName("account").Item(0).Text ); //Это показывает содержимое тега account
        Тэг может быть расположен в любом месте, в любой структуре XML.

        Комментарий


        • #5
          Да.
          Только во Item(0) смущает. Он ведь и 1, 2, 3 и тд может быть.
          Не в данном случае, но в принципе
          VP

          Комментарий


          • #6
            а это уже по циклу перебираю.
            Спасибо огромное, очень помогли.
            Столько много заданий в последнее время с форматом XML

            Комментарий

            Пользователи, просматривающие эту тему

            Свернуть

            Присутствует 1. Участников: 0, гостей: 1.

            Обработка...
            X