我打算编写一个通过 SOAP 获取数据的脚本。我可以获得一个包含大量以下数据的文件,例如:
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><ns0:GetList_Operation_0Response xmlns:ns0="urn:TEST:AST:Attributes" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns0:getListValues>
<ns0:AssetLifecycleStatus>Deployed</ns0:AssetLifecycleStatus>
<ns0:ReconciliationIdentity>OI-ASDAQWDASDWA</ns0:ReconciliationIdentity>
<ns0:instanceId>OI-SDWDSDWDSDWD</ns0:instanceId>
<ns0:ModifiedDate>2017-12-12T03:31:32+01:00</ns0:ModifiedDate>
<ns0:ClassId>BMC_COMPUTERSYSTEM</ns0:ClassId>
</ns0:getListValues>
<ns0:getListValues>
<ns0:AssetLifecycleStatus>Being Assembled</ns0:AssetLifecycleStatus>
<ns0:ReconciliationIdentity>OI-ASDQWAWDSADW</ns0:ReconciliationIdentity>
<ns0:instanceId>OI-SDWDSWDSWDWD</ns0:instanceId>
<ns0:ModifiedDate>2017-12-10T03:30:21+01:00</ns0:ModifiedDate>
<ns0:ClassId>BMC_COMPUTERSYSTEM</ns0:ClassId>
</ns0:getListValues>
<ns0:getListValues>
<ns0:AssetLifecycleStatus>Deployed</ns0:AssetLifecycleStatus>
<ns0:ReconciliationIdentity>OI-ASDWASDWDASDW</ns0:ReconciliationIdentity>
<ns0:instanceId>OI-SDWDSDWDSDWD</ns0:instanceId>
<ns0:ModifiedDate>2017-12-12T03:31:31+01:00</ns0:ModifiedDate>
<ns0:ClassId>BMC_COMPUTERSYSTEM</ns0:ClassId>
</ns0:getListValues>
</ns0:GetList_Operation_0Response></soapenv:Body></soapenv:Envelope>
您能否建议如何仅提取“AssetLifecycleStatus”之间的状态,例如:已部署。它应该遍历这一行的每一部分并将输出提供给新的一行。示例:
已部署
正在组装
已部署
哪种语言是处理此类数据的最佳语言,是 Perl 吗? 感谢您的信息!
最佳答案
确实没有一种解析 XML 的最佳语言。 Perl 以其正则表达式而闻名,但解析 XML 最好使用专用解析器来完成。在 perl 中,XML::LibXML
是被广泛使用的一种。还有其他针对 Perl 的解析器,以及 Python、Ruby、JS 等。
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $doc = XML::LibXML->load_xml(IO => *DATA);
# can also load with (string => $xml_string) or (location => 'file.xml');
my @nodes = $doc->getElementsByTagName('ns0:AssetLifecycleStatus');
for my $node (@nodes) {
print $node->textContent."\n";
}
__DATA__
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><ns0:GetList_Operation_0Response xmlns:ns0="urn:TEST:AST:Attributes" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns0:getListValues>
<ns0:AssetLifecycleStatus>Deployed</ns0:AssetLifecycleStatus>
<ns0:ReconciliationIdentity>OI-ASDAQWDASDWA</ns0:ReconciliationIdentity>
<ns0:instanceId>OI-SDWDSDWDSDWD</ns0:instanceId>
<ns0:ModifiedDate>2017-12-12T03:31:32+01:00</ns0:ModifiedDate>
<ns0:ClassId>BMC_COMPUTERSYSTEM</ns0:ClassId>
</ns0:getListValues>
<ns0:getListValues>
<ns0:AssetLifecycleStatus>Being Assembled</ns0:AssetLifecycleStatus>
<ns0:ReconciliationIdentity>OI-ASDQWAWDSADW</ns0:ReconciliationIdentity>
<ns0:instanceId>OI-SDWDSWDSWDWD</ns0:instanceId>
<ns0:ModifiedDate>2017-12-10T03:30:21+01:00</ns0:ModifiedDate>
<ns0:ClassId>BMC_COMPUTERSYSTEM</ns0:ClassId>
</ns0:getListValues>
<ns0:getListValues>
<ns0:AssetLifecycleStatus>Deployed</ns0:AssetLifecycleStatus>
<ns0:ReconciliationIdentity>OI-ASDWASDWDASDW</ns0:ReconciliationIdentity>
<ns0:instanceId>OI-SDWDSDWDSDWD</ns0:instanceId>
<ns0:ModifiedDate>2017-12-12T03:31:31+01:00</ns0:ModifiedDate>
<ns0:ClassId>BMC_COMPUTERSYSTEM</ns0:ClassId>
</ns0:getListValues>
</ns0:GetList_Operation_0Response></soapenv:Body></soapenv:Envelope>
关于xml - 如何使用正则表达式操作来自 SOAP XML 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47924918/