通过PHP获取XML格式的HTML节点值

时间:2015-10-24 17:35:04

标签: php html xml

我的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 ); 元素识别为另一个节点,因此不会有文本/值。我该怎么办?

1 个答案:

答案 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>个包裹标签。