Чтение файлов XML по тегам из url и отправка запроса xml.
5 (2)
Чтение файлов XML по тегам из url и отправка запроса xml. ( Andrew01 21.11.2014 09:26 )
4(3)Здравствуйте уважаемые.
Собственно сабж.
1. Подскажите пожалуйста на примере как прочесть xml файл и определенные данные из этого файла по тегам.
2. как сформировать запрос xml и получить ответ с сервера.
>> Ответитьна примерах ( Sergey V. Mamaev 24.11.2014 05:41 )
3(2)1. собственно класс для работы с xml: Mac\Kviter\txml.mac
2. отправка запроса и получение ответа от сервера: Mac\ElectronicExchange\smev_send.mac
>> ОтветитьСпасибо, ( Andrew01 26.11.2014 19:02 )
5(1)про создание и обработку xml понял, все получается, а с отправкой запросов и получением ответа - увы нет.
Есть что нибудь попроще? или подскажите где в документации глянуть эти моменты?
>> Ответитьдокументация? ( Sergey V. Mamaev 27.11.2014 06:17 )
5(1)а документация-то откуда? это частный макрос..
там параметры вроде проще некуда:
_Addr -- URL-адрес запроса
XmlMsg -- сам текст отсылаемого запроса (не имя файла, а его содержимое)
fileName/filePath -- используются для формирования пути файла сохранения ответа по запросу
вот у нас файлы ответов выглядят так: ..\txtfile\response112620140200000077.xml
>> Ответить
вот так можно ( yakov 28.11.2014 12:20 )
5(1)k=ActiveX ("Msxml.DOMDocument");
if(k.LoadXML(XML))
NodeList = k.selectNodes("account");
XML - это содержимое xml-файла
если нужно непосредственно с url, то можно так
LoadFromXML(ReadTxtFile(url));
а дальше все стандартные сом-объекты
"account" - здесь это читаемый тэг xml-файла
>> Ответитьформирвоание запроса ( yakov 28.11.2014 12:24 )
5(1)а каким методом хочешь формировать запрос:
если методом Get, то просто открывай файл, указывая в имени нудный url и передавай в него нужные параметры
если soap-хочешь передавать, то тут я использовал самописную dlm-ку на c++builder, к-я с этим легко справлялась, моежт есть другие способы не знаю, можно на c# сваять простеньку сборку
>> Ответитьесть код ( Andrew01 01.12.2014 08:20 )
5(1)Import xmlRequest = ActiveX("MSXML2.ServerXMLHTTP.6.0",true); DomDoc = ActiveX("MSXML.DomDocument"); DomDoc.async = false; server = "https://nnn.com/api-xml?xmlstring="; key = "123456789"; Request = "<?xml version=\"1.0\" encoding=\"windows-1251\"?>"+ "<request cmd=\"RENT_REQ_ACCOUNT\">" + "<key>"+key+"</key>"+ "<company_id>over</company_id>"+ "<account>000008</account>"+ "<fin_period><month>10</month><year>2014</year></fin_period>"+ "<partner_tid>111111111</partner_tid>"+ "<partner>2223-333-111</partner></request>"; xmlRequest.Open("GET",server + Request,false); xmlRequest.setRequestHeader("Content-Type","text/xml; charset=Windows-1251"); DomDoc.Load(xmlRequest.ResponseXML);
а в ответ в одну строку тянуться сообщения.
Println(DomDoc.DocumentElement.ChildNodes(1).text); //тут все нормально, ответ устраивает Println(DomDoc.DocumentElement.ChildNodes(6).text); //а тут все в одну строку идет
ответ
102014Услуга такая то0.0125.790.00.0125.790.00.000.0125.790.000.000.0125.79
>> Ответитьи вот пробую разными методами и разные компоненты подставлять - не получается ( Andrew01 01.12.2014 08:27 )
5(1)иногда вообще вылетает из терминала. Хотя раньше лет 6 назад это все работало, писал другой проект, распарсивал по XML тегам
типа
DocXML = DOMDoc.documentElement; println(DocXML.ChildNodes(0).Attributes.Item(0).value);
пробую так, вылетает из терминала.
>> ОтветитьВопрос закрыт.... ( Andrew01 02.12.2014 11:29 )
5(1)Методами научного тыка и читая англоязычную документацию решил вопрос, что мне поможет GetElementsByTagName(TagName)
DomXML = xmlRequest.ResponseXML.DocumentElement; PrintLn(DomXml.GetElementsByTagName("month").Item(0).Text );
>> Ответить