xml - 使用 SOAP::Lite 解析 XML 响应
问题描述
使用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 路径获取相同 ID 的值。
我想<key>
从请求的 XML 路径中获取剩余 ID,例如beta
和gamma
。
解决方案
<number>
从元素中获取所有日期的 xpath 表达式:
//services/common-data//subscription//number/text()
要仅从<number>
a 内部的元素中获取数据,<subscription-list>
这是一个<default-subscription/>
用途:
//services/common-data//subscription[.//child::*[name()='default-subscription']]//number/text()
推荐阅读
- mysql - Django 执行特定的 SQL 查询来选择和监控数据
- google-maps - 颤振地理定位器包不检索位置
- speech-recognition - 连续语音中音素识别的隐马尔可夫模型
- css - 如何设置第一个字母的样式并应用此线性渐变动画?
- sql - 在 SQL Server 的更新语句中使用 group by 时出现语法错误
- django - 具有重复字段的行的 Django“列表”和“详细信息”视图
- apache-kafka - Spring cloud Stream Kafka:获取processor.output().send(message)的确认;
- wordpress - Woocommerce - 如果在结帐期间登录,则删除所有旧购物车物品
- react-native - React-Native/Redux-Saga:如何等待调度完成
- xamarin - TabbedPage 上的 Retap 事件