Анализ XML-ответа с использованием SOAP :: Lite - PullRequest
0 голосов
/ 09 октября 2019

Использование SOAP :: Lite Я пытаюсь разобрать XML-ответ;однако SOAP :: SOM не дает мне желаемых значений. Кажется, он идет по другому пути, чем тот, который я пытаюсь найти.

    #!/usr/bin/env perl
    use strict;
    use warnings;
    use SOAP::Lite;
    use Data::Dumper;

    my $xml  = <<'__XML__';
    <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
      <S:Body>
        <GetResponse>
          <services>
            <communication>
              <ruleset>
                <rule id="CD22222222">
                  <id>CD22222222</id>
                  <conditions>
                    <xtra>
                      <one id="sip:+22222222@ims">
                        <id>sip:+22222222@ims</id>
                      </one>
                      <one id="tel:+22222222">
                        <id>tel:+22222222</id>
                      </one>
                    </xtra>
                  </conditions>
                  <actions>
                    <allow>false</allow>
                  </actions>
                </rule>
                <rule id="CD33333333">
                  <id>CD33333333</id>
                  <conditions>
                    <xtra>
                      <one id="sip:+33333333@ims">
                        <id>sip:+33333333@ims</id>
                      </one>
                      <one id="tel:+33333333">
                        <id>tel:+33333333</id>
                      </one>
                    </xtra>
                  </conditions>
                  <actions>
                    <allow>false</allow>
                  </actions>
                </rule>
              </ruleset>
            </communication>
            <common-data>
              <subscription-list>
                <subscription id="PD11111111">
                  <id>PD11111111</id>
                  <number>11111111</number>
                  <key>alpha</key>
                  <default-subscription/>
                </subscription>
                <subscription id="CD22222222">
                  <id>CD22222222</id>
                  <number>22222222</number>
                  <key>beta</key>
                </subscription>
                <subscription id="CD33333333">
                  <id>CD33333333</id>
                  <number>33333333</number>
                  <key>gama</key>
                </subscription>
              </subscription-list>
            </common-data>
          </services>
        </GetResponse>
      </S:Body>
    </S:Envelope>
    __XML__

    my $som = SOAP::Deserializer->deserialize($xml);

    print Dumper($som->valueof('//services/common-data/subscription-list/'));

Я получаю значения для тех же идентификаторов, используя другой путь XML.

IВы хотите получить <key> для оставшихся идентификаторов из запрошенного пути XML, например, beta и gamma.

1 Ответ

1 голос
/ 14 октября 2019

Выражение xpath для получения всей даты из элемента <number>:

//services/common-data//subscription//number/text()

Чтобы получить только данные из элемента <number>, который находится внутри <subscription-list>, который является <default-subscription/>использование:

//services/common-data//subscription[.//child::*[name()='default-subscription']]//number/text()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...