php解析XML标记内获得的字符串

时间:2018-12-27 11:05:28

标签: php xml xml-parsing

最近我不得不做一个api调用,它返回了XML响应。但是,这似乎是一个奇怪的XML,它只有1个基本标记,而所有其他信息都在此基本标记内以字符串形式给出。我需要获取每个字符串标签的值,但不知道如何实现。

下面给出的是从api接收的示例响应。

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://webservices/api/v1/Inventory.asmx">
&lt;NewDataSet&gt;
    &lt;Table&gt;
        &lt;ITEMNO&gt;120&lt;/ITEMNO&gt;
        &lt;IDESC&gt;BERG 22423 BULL .224 90GR VLD TGT  100&lt;/IDESC&gt;
        &lt;IMFSEQ&gt;570&lt;/IMFSEQ&gt;
        &lt;IMFGNO&gt;628&lt;/IMFGNO&gt;
        &lt;CSEQ&gt;0&lt;/CSEQ&gt;
        &lt;ITYPE&gt;7&lt;/ITYPE&gt;
        &lt;SHDESC&gt;Berger Bullets 22423 Target 22 Caliber .224 90 GR Target Very Low Drag 100 Box                                                                                                                          &lt;/SHDESC&gt;
        &lt;UOM&gt;EA&lt;/UOM&gt;
        &lt;PRC1&gt;34.73&lt;/PRC1&gt;
        &lt;CPRC&gt;34.04&lt;/CPRC&gt;
        &lt;QTYOH&gt;26&lt;/QTYOH&gt;
        &lt;WTPBX&gt;1.400&lt;/WTPBX&gt;
        &lt;ITUPC&gt;679459224239   &lt;/ITUPC&gt;
        &lt;MFGINO&gt;22423       &lt;/MFGINO&gt;
        &lt;SCNAM1&gt;BERG   &lt;/SCNAM1&gt;
        &lt;SCNAM2&gt;B22CAL &lt;/SCNAM2&gt;
        &lt;CATCD xml:space="preserve"&gt; &lt;/CATCD&gt;
        &lt;MFPRTYP xml:space="preserve"&gt; &lt;/MFPRTYP&gt;
        &lt;MFPRC&gt;0.00&lt;/MFPRC&gt;
        &lt;CATID&gt;36&lt;/CATID&gt;
        &lt;TXTREF&gt;120&lt;/TXTREF&gt;
        &lt;PICREF&gt;120&lt;/PICREF&gt;
        &lt;ITBRDNO&gt;628&lt;/ITBRDNO&gt;
        &lt;SERIES&gt;Match Grade                                                                                                                                                                                             &lt;/SERIES&gt;
        &lt;LENGTH&gt;4.1&lt;/LENGTH&gt;
        &lt;HEIGHT&gt;1.2&lt;/HEIGHT&gt;
        &lt;WIDTH&gt;3.3&lt;/WIDTH&gt;
        &lt;HAZAIR xml:space="preserve"&gt; &lt;/HAZAIR&gt;
        &lt;HAZGRND xml:space="preserve"&gt; &lt;/HAZGRND&gt;
        &lt;CHGDTE&gt;2018-05-23T00:00:00+00:00&lt;/CHGDTE&gt;
        &lt;LOADDT&gt;2015-11-05T00:00:00+00:00&lt;/LOADDT&gt;
    &lt;/Table&gt;
&lt;/NewDataSet&gt;
</string>

我尝试了以下方法,但似乎无法按需工作

<?php
$xml=simplexml_load_string($myXMLData);
print_r($xml);

$xml = new SimpleXMLElement($myXMLData);
print_r($xml);
?>

寻找的是获取响应内每个标签的值。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用html_entity_decode将字符串转换为正确的XML:

$xml = new SimpleXMLElement(html_entity_decode($myXMLData));
print_r($xml);

此处演示:https://3v4l.org/AWWEH

答案 1 :(得分:1)

您在另一个XML文档中有一个XML文档作为文本。因此,您必须加载外部文档,获取文本内容,然后再次将其解析为XML:

$xml = <<<'XML'
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://webservices/api/v1/Inventory.asmx">
&lt;NewDataSet&gt;
    &lt;Table&gt;
        &lt;ITEMNO&gt;120&lt;/ITEMNO&gt;
        &lt;IDESC&gt;BERG 22423 BULL .224 90GR VLD TGT  100&lt;/IDESC&gt;
    &lt;/Table&gt;
&lt;/NewDataSet&gt;
</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