Проблема с getChild при разборе XML с помощью Google Script - PullRequest
1 голос
/ 15 мая 2019

Пожалуйста, кто-нибудь может мне помочь с этим, я застрял, я пытаюсь разобрать эти данные XML и вставить их в Google Sheet, я могу правильно получить XML, но после анализа я получаю ноль с "getChild "..

Это выдержка из XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <SOAP-ENV:Body>
        <ns1:etaWebServicesResponse xmlns:ns1="http://ws.ABC.com/ABCws.wsdl" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <return xsi:type="xsd:string">
                <PERSONNEL>
                    <INSTRUCTOR>
                        <PERSONNEL_ID>0001</PERSONNEL_ID> 
                        <FIRST_NAME>Mike</FIRST_NAME> 
                    </INSTRUCTOR>
                    <INSTRUCTOR>
                        <PERSONNEL_ID>0002</PERSONNEL_ID> 
                        <FIRST_NAME>Joanna</FIRST_NAME>
                    </INSTRUCTOR>
            </return>
        </ns1:etaWebServicesResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

И я пытаюсь с этим Google App Script

function myFunction() {

  var xmlInstructor = "<?xml version='1.0' encoding='UTF-8'?><SOAP-ENV:Envelope xmlns:" + 
  'SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><etaws><operation opstype="instructor">export</operation><parameters><customercode>AAAAAAAA</customercode><accesscode>BBBBBBBBB</accesscode><username>xybvsfsddfas</username></parameters></etaws></SOAP-ENV:Body></SOAP-ENV:Envelope>';

  var url = "https://ABCsystems.com/tseta/servlet/ABC?xmldata=" + xmlInstructor;
  var urlx = encodeURI(url);
  var XMLFetch = UrlFetchApp.fetch(urlx).getContentText();

  var document = XmlService.parse(XMLFetch);

  var documentPretty = XmlService.getPrettyFormat().format(document);
  Logger.log("PrettyFormat:");
  Logger.log(documentPretty);

  Logger.log("Descendants:");
  Logger.log(document.getDescendants());

  var root = document.getRootElement();  
  Logger.log("getRootElement:" + root);

  var instructors = root.getChild("PERSONNEL");
  Logger.log("Personnel:" + instructors);
}

Журнал документаимеет правильный XML, как показано вверху.

Журнал Потомков содержит следующую информацию (первая часть):

[19-05-14 15:12:09:409 PDT] Descendants:
[19-05-14 15:12:09:427 PDT] [[Element: <SOAP-ENV:Envelope [Namespace: http://schemas.xmlsoap.org/soap/envelope/]/>], [Element: <SOAP-ENV:Body [Namespace: http://schemas.xmlsoap.org/soap/envelope/]/>], [Element: <ns1:etaWebServicesResponse [Namespace: http://ws.ABCsystems.com/ABC.wsdl]/>], [Element: <return/>], 
, [Element: <PERSONNEL/>], 
 , [Element: <INSTRUCTOR/>], 
  , [Element: <PERSONNEL_ID/>], 0001, 
  , [Element: <FIRST_NAME/>], Mike, 

Журнал getRootElement:

[19-05-14 15:12:09:428 PDT] getRootElement:[Element: <SOAP-ENV:Envelope [Namespace: http://schemas.xmlsoap.org/soap/envelope/]/>]

и, наконец, инструкторы = ноль, я не собираюсь углубляться.Есть предложения?

1 Ответ

0 голосов
/ 15 мая 2019
  • Вы хотите получить значения PERSONNEL из данных XML в верхней части вашего вопроса.

Если мое понимание верно, как насчет этого примера сценария?

Модифицированный скрипт:

var data = '<?xml version="1.0" encoding="UTF-8" ?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Body><ns1:etaWebServicesResponse xmlns:ns1="http://ws.ABC.com/ABCws.wsdl" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><return xsi:type="xsd:string"><PERSONNEL><INSTRUCTOR><PERSONNEL_ID>0001</PERSONNEL_ID> <FIRST_NAME>Mike</FIRST_NAME> </INSTRUCTOR><INSTRUCTOR><PERSONNEL_ID>0002</PERSONNEL_ID> <FIRST_NAME>Joanna</FIRST_NAME></INSTRUCTOR></PERSONNEL></return></ns1:etaWebServicesResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>';
var xml = XmlService.parse(data);
var rootChildren = xml.getRootElement().getChildren();
for (var i = 0; i < rootChildren.length; i++) {
  if (rootChildren[i].getName() == "Body" ) {
    var c1 = rootChildren[i].getChildren();
    for (var j = 0; j < c1.length; j++) {
      var c2 = c1[j].getChild("return").getChild("PERSONNEL").getChildren();
      for (var k = 0; k < c2.length; k++) {
        var PERSONNEL_ID = c2[k].getChild("PERSONNEL_ID").getValue();
        var FIRST_NAME = c2[k].getChild("FIRST_NAME").getValue();
        Logger.log("PERSONNEL_ID: %s, FIRST_NAME: %s", PERSONNEL_ID, FIRST_NAME)
      }
    }
  }
}

Примечание:

  • Ваши XML-данные в верхней части вашего вопроса не заполнены. Таким образом, чтобы использовать XmlService.parse(), я добавил </PERSONNEL> перед </return>.

Справка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...