Разобрать SOAP XML в JSON в ReactJs - PullRequest
0 голосов
/ 04 декабря 2018

Я борюсь с использованием DOMParser () для анализа моего xml в JSON-объект:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope 
xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body> 
<GetPersonByNameSurnamePasswordResponse xmlns="api/PersonService"> 
<GetPersonByNameSurnamePasswordResult>
     <Id>1</Id>
     <Name>E</Name> 
     <Surname>P</Surname>
     <Password>s</Password>
     <BirthDate>2018-11-06T16:31:32.9001423+02:00</BirthDate> 
     <Email>davcazv@gmail.com</Email> 
</GetPersonByNameSurnamePasswordResult> 
</GetPersonByNameSurnamePasswordResponse></soap:Body></soap:Envelope>

Похоже, я получаю все данные (длина и xml} обычно: console.log data

Как вы можете видеть на картинке, мой json помещается в 6 раз (столько, сколько имеется данных на моем объекте xml), но JSON отображается не правильно (только фигурные скобки}. Вот мой код:

 SignIn.js:

 import { getPersonByLoginData} from "./Utils";

  login = async() => {

  var get = await getPersonByLoginData(this.state.username, 
  this.state.surname, this.state.password, callback)
      .then((response) => {
          //console.log(response);
          callback = response;
          return callback;
      })
      ; 
  console.log("something");
  console.log(callback.data);
  var doc = new DOMParser().parseFromString(callback.data, 'text/xml');
  var valueXML = 
  doc.getElementsByTagName('GetPersonByNameSurnamePasswordResult');
  var temps = valueXML[0].children;
  var nortifications = [];
  for (var i = 0; i < temps.length; i++) {
      var temp = temps[i].children;
      var obj = {};
      for (var j = 0; j < temp.length; j++) {
          var property = temp[j];

          obj[property.localName] = property.innerHTML;
      }

      console.log(JSON.stringify(obj));

      nortifications.push(obj);
  }
  console.log(valueXML[0].children);
  <h3>callback</h3>
};
handleChange = name => event => {

    this.setState({
        [name]: event.target.value,
    });
    console.log(this.state);
};

Utils.js:

import axios from 'axios'

export async function getPersonByLoginData(name, surname, password,useCallback) 
{
var th = this;
let xmls =
    '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">\
     <soap12:Body>\
        <GetPersonByNameSurnamePassword xmlns="api/PersonService">\
            <name>' + name + '</name>\
            <surname>' + surname + '</surname>\
            <password>' + password + '</password>\
        </GetPersonByNameSurnamePassword>\
    </soap12:Body >\
    </soap12:Envelope >';


await axios.post('http://localhost:52312/PersonService.asmx?wsdl',
    xmls,
    {
        headers:
        {
            'Content-Type': 'text/xml',
            SOAPAction: "api/PersonService/GetPersonByNameSurnamePassword"
        }
   }).then(function (response) {

       useCallback = response;
       //console.log(useCallback);


       return useCallback;
        /* atsakymas yra res.data */

    }).catch(err => {
        console.log("unable to load");
    });

//console.log(useCallback);
return useCallback;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...