在 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/"><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/19/2022
4:53:35 AM" /></licensees></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/"><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/19/2022
4:53:35 AM" /></licensees></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();
当我从网络服务使用 simplexml_load_file 时,它 returns
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.cebroker.com/CEBrokerWebService/"><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/19/2022
4:53:35 AM" /></licensees></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/"><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/19/2022
4:53:35 AM" /></licensees></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();