我的XML看起来像这样:
[PDOException]
SQLSTATE[HY000]: General error: 1 table "users" already exists
[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1 table "users" already exists
SEE:节点<?xml version="1.0" encoding="utf-8"?>
<SHOP>
<SHOPITEM>
<ITEM_ID>8</ITEM_ID>
<PRODUCT>Body EMMER W 12</PRODUCT>
<DESCRIPTION>
<p>Test 1
<br />Good
<br />Big
<br />Long
<br />Works
</p>
</DESCRIPTION>
</SHOPITEM>
</SHOP>
包含HTML内容,这些不是其他节点。
然后在PHP中打开XML文件:
DESCRIPTION
然后我想保存一些值,所以:
$xml = simplexml_load_file("file1.xml");
foreach($xml->children() as $data) {
...
}
但是当我将这些打印到HTML表格时,描述为空。原因是,PHP将$product = array(
"id" => (string) $data->ITEM_ID,
"item_name" => (string) $data->PRODUCT,
"description" => (string) $data->DESCRIPTION
);
元素识别为另一个节点,因此不会有文本/值。我该怎么办?
答案 0 :(得分:1)
看起来你的XML文件实际上是HTML和XML的混合,这有点混乱。在这里做的最好的事情是通过将HTML包装在<![CDATA[""]]>
(字符数据)标签中来解决这个问题,这样就可以使用您正在尝试使用的PHP脚本。
所以而不是
<DESCRIPTION>
<p>Test 1
<br />Good
<br />Big
<br />Long
<br />Works
</p>
</DESCRIPTION>
你应该使用
<DESCRIPTION>
<![CDATA[
<p>Test 1
<br />Good
<br />Big
<br />Long
<br />Works
</p>
]]>
</DESCRIPTION>
如果编辑xml文件不是一个选项,你可以像这样用SimpleXMLElement::asXML()
字符串化孩子:
$product = array(
//...
"description" => (string) $data->DESCRIPTION->asXML(),
);
编辑:
请注意,使用后一种方法,$data->DESCRIPTION->asXML()
将包含<DESCRIPTION>
个包裹标签。