在 PHP 中将字符串转换为 xml

convert string to xml in PHP

当我从网络服务使用 simplexml_load_file 时,它 returns

<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://www.cebroker.com/CEBrokerWebService/">&lt;licensees&gt;&lt;licensee
 valid="true" State="FL" licensee_profession="RN"
 licensee_number="2676612" state_license_format="" first_name="HENRY"
 last_name="GEITER" ErrorCode="" Message="" TimeStamp="2/19/2022
 4:53:35 AM" /&gt;&lt;/licensees&gt;</string>

但是,我无法将其解析为 XML 来获取属性。我需要将其格式化为:

<licensees>
   <licensee valid="true" State="FL" licensee_profession="RN" licensee_number="2676612" state_license_format="" first_name="HENRY" last_name="GEITER" ErrorCode="" Message="" TimeStamp="2/18/2022 6:43:20 PM" />
</licensees>

然后此代码有效:

$xml_string = simplexml_load_string($xmlresponse);
foreach ($xml_string->licensee[0]->attributes() as $a => $b) {
    echo $a , '=' , $b;
}

我尝试了 str_replace 和解码,但没有成功。

由于您想要的 XML 似乎存储为 htmlentities,因此您的第一个 simplexml_load_string() 不会将其读取为 XML。如果你把那个字符串和 运行 也通过 simplexml_load_string() 然后你会得到它作为 XML:

$xml_string = simplexml_load_string($xmlresponse);
$licensees = simplexml_load_string($xml_string);

var_dump($licensees);

输出:

object(SimpleXMLElement)#2 (1) {
  ["licensee"]=>
  object(SimpleXMLElement)#3 (1) {
    ["@attributes"]=>
    array(10) {
      ["valid"]=>
      string(4) "true"
      ["State"]=>
      string(2) "FL"
      ["licensee_profession"]=>
      string(2) "RN"
      ["licensee_number"]=>
      string(7) "2676612"
      ["state_license_format"]=>
      string(0) ""
      ["first_name"]=>
      string(5) "HENRY"
      ["last_name"]=>
      string(6) "GEITER"
      ["ErrorCode"]=>
      string(0) ""
      ["Message"]=>
      string(0) ""
      ["TimeStamp"]=>
      string(21) "2/19/2022  4:53:35 AM"
    }
  }
}

这是一个演示:https://3v4l.org/da3Up

“字符串”元素的内容是 XML 文档本身 - 存储在文本节点中。您可以将其视为信封。所以你必须先加载外部 XML 文档并读取文本内容,然后再将其加载为 XML 文档。

$outerXML = <<<'XML'
<?xml version="1.0" encoding="utf-8"?> 
<string xmlns="http://www.cebroker.com/CEBrokerWebService/">&lt;licensees&gt;&lt;licensee
 valid="true" State="FL" licensee_profession="RN"
 licensee_number="2676612" state_license_format="" first_name="HENRY"
 last_name="GEITER" ErrorCode="" Message="" TimeStamp="2/19/2022
 4:53:35 AM" /&gt;&lt;/licensees&gt;</string>
XML;

$envelope = new SimpleXMLElement($outerXML);
$licensees = new SimpleXMLElement((string)$envelope);

echo $licensees->asXML();

在DOM中:

$envelope = new DOMDocument();
$envelope->loadXML($outerXML);
$document = new DOMDocument();
$document->loadXML($envelope->documentElement->textContent);

echo $document->saveXML();