最近我不得不做一个api调用,它返回了XML响应。但是,这似乎是一个奇怪的XML,它只有1个基本标记,而所有其他信息都在此基本标记内以字符串形式给出。我需要获取每个字符串标签的值,但不知道如何实现。
下面给出的是从api接收的示例响应。
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://webservices/api/v1/Inventory.asmx">
<NewDataSet>
<Table>
<ITEMNO>120</ITEMNO>
<IDESC>BERG 22423 BULL .224 90GR VLD TGT 100</IDESC>
<IMFSEQ>570</IMFSEQ>
<IMFGNO>628</IMFGNO>
<CSEQ>0</CSEQ>
<ITYPE>7</ITYPE>
<SHDESC>Berger Bullets 22423 Target 22 Caliber .224 90 GR Target Very Low Drag 100 Box </SHDESC>
<UOM>EA</UOM>
<PRC1>34.73</PRC1>
<CPRC>34.04</CPRC>
<QTYOH>26</QTYOH>
<WTPBX>1.400</WTPBX>
<ITUPC>679459224239 </ITUPC>
<MFGINO>22423 </MFGINO>
<SCNAM1>BERG </SCNAM1>
<SCNAM2>B22CAL </SCNAM2>
<CATCD xml:space="preserve"> </CATCD>
<MFPRTYP xml:space="preserve"> </MFPRTYP>
<MFPRC>0.00</MFPRC>
<CATID>36</CATID>
<TXTREF>120</TXTREF>
<PICREF>120</PICREF>
<ITBRDNO>628</ITBRDNO>
<SERIES>Match Grade </SERIES>
<LENGTH>4.1</LENGTH>
<HEIGHT>1.2</HEIGHT>
<WIDTH>3.3</WIDTH>
<HAZAIR xml:space="preserve"> </HAZAIR>
<HAZGRND xml:space="preserve"> </HAZGRND>
<CHGDTE>2018-05-23T00:00:00+00:00</CHGDTE>
<LOADDT>2015-11-05T00:00:00+00:00</LOADDT>
</Table>
</NewDataSet>
</string>
我尝试了以下方法,但似乎无法按需工作
<?php
$xml=simplexml_load_string($myXMLData);
print_r($xml);
$xml = new SimpleXMLElement($myXMLData);
print_r($xml);
?>
寻找的是获取响应内每个标签的值。非常感谢您的帮助。
答案 0 :(得分:1)
您可以使用html_entity_decode
将字符串转换为正确的XML:
$xml = new SimpleXMLElement(html_entity_decode($myXMLData));
print_r($xml);
答案 1 :(得分:1)
您在另一个XML文档中有一个XML文档作为文本。因此,您必须加载外部文档,获取文本内容,然后再次将其解析为XML:
$xml = <<<'XML'
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://webservices/api/v1/Inventory.asmx">
<NewDataSet>
<Table>
<ITEMNO>120</ITEMNO>
<IDESC>BERG 22423 BULL .224 90GR VLD TGT 100</IDESC>
</Table>
</NewDataSet>
</string>
XML;
$stringElement = new SimpleXMLELement($xml);
echo $stringElement, "\n";
// force to string and parse as XML
$newDataSet = new SimpleXMLElement((string)$stringElement);
echo $newDataSet->Table->ITEMNO;
输出:
<NewDataSet>
<Table>
<ITEMNO>120</ITEMNO>
<IDESC>BERG 22423 BULL .224 90GR VLD TGT 100</IDESC>
</Table>
</NewDataSet>
120