0

我在数据库中有一个带有值的字符串字段:

<ProductOrderItem>
<Product>
<ProductOffering>
<id>1</id>
</ProductOffering>
<ComponentProduct>
<ProductOffering>
<Id>10</Id>
</ProductOffering>
<CharacteristicValue>
<Characteristic>
<Name>Color</Name>
</Characteristic>
<Value>black</Value>
</CharacteristicValue>
<CharacteristicValue>
<Characteristic>
<Name>IMEI</Name>
</Characteristic>
<Value>imei100</Value>
</CharacteristicValue>
</ComponentProduct>
<ComponentProduct>
<ProductOffering>
<Id>11</Id>
</ProductOffering>
<CharacteristicValue>
<Characteristic>
<Name>MSISDN</Name>
</Characteristic>
<Value>063</Value>
</CharacteristicValue>
<CharacteristicValue>
<Characteristic>
<Name>IMSI</Name>
</Characteristic>
<Value>064</Value>
</CharacteristicValue>
</ComponentProduct>
</Product>
</ProductOrderItem>

当我尝试时:

$xml = new SimpleXMLElement($field);

我得到了例外:

字符串不能解析为XML

我在 Notepad++ 中验证了 XML,它显示“未检测到错误”。我真的必须在该字符串字段的某个字段中具有此 XML 值。我的问题在哪里?谢谢

更新: 我的字段现在具有价值:

<?xml version="1.0" encoding="utf-8"?>
<ProductOrderItem><Product><ProductOffering><id>1</id></ProductOffering><ComponentProduct><ProductOffering><Id>10</Id></ProductOffering><CharacteristicValue><Characteristic><Name>Color</Name></Characteristic><Value>black</Value></CharacteristicValue><CharacteristicValue><Characteristic><Name>IMEI</Name></Characteristic><Value>imei100</Value></CharacteristicValue></ComponentProduct><ComponentProduct><ProductOffering><Id>11</Id></ProductOffering><CharacteristicValue><Characteristic><Name>MSISDN</Name></Characteristic><Value>063</Value></CharacteristicValue><CharacteristicValue><Characteristic><Name>IMSI</Name></Characteristic><Value>064</Value></CharacteristicValue></ComponentProduct></Product></ProductOrderItem>

但仍然是同样的例外。

4

2 回答 2

1
$filed='<?xml version="1.0" encoding="utf-8"?>
 <ProductOrderItem>
  <Product>
    <ProductOffering>
      <id>1</id>
    </ProductOffering>
    <ComponentProduct>
      <ProductOffering>
        <Id>10</Id>
      </ProductOffering>
      <CharacteristicValue>
        <Characteristic>
          <Name>Color</Name>
        </Characteristic>
        <Value>black</Value>
      </CharacteristicValue>
      <CharacteristicValue>
        <Characteristic>
          <Name>IMEI</Name>
        </Characteristic>
        <Value>imei100</Value>
      </CharacteristicValue>
    </ComponentProduct>
    <ComponentProduct>
      <ProductOffering>
        <Id>11</Id>
      </ProductOffering>
      <CharacteristicValue>
        <Characteristic>
          <Name>MSISDN</Name>
        </Characteristic>
        <Value>063</Value>
      </CharacteristicValue>
      <CharacteristicValue>
        <Characteristic>
          <Name>IMSI</Name>
        </Characteristic>
        <Value>064</Value>
      </CharacteristicValue>
    </ComponentProduct>
  </Product>
</ProductOrderItem>';

$xml = new SimpleXMLElement($filed);
print_r($xml );

使用此功能检查 xml

function isXML($xml){
   libxml_use_internal_errors(true);

   $doc = new DOMDocument('1.0', 'utf-8');
   $doc->loadXML($xml);

   $errors = libxml_get_errors();

   if(empty($errors)){
       return true;
   }

   $error = $errors[0];
   if($error->level < 3){
       return true;
   }

   $explodedxml = explode("r", $xml);
   $badxml = $explodedxml[($error->line)-1];

   $message = $error->message . ' at line ' . $error->line . '. Bad XML: ' . htmlentities($badxml);
   return $message;
}

样本echo isXML($filed);

于 2013-04-05T09:46:51.847 回答
-1

我在数据库中(以及磁盘上的某些文件中)也有有效的 XML。我可以发给你(如果你真的想看的话)。但是,在您的代码上下文中,仅在某处拥有有效的 XML 是完全没用的:

$xml = new SimpleXMLElement($field);

更重要的是,$field您拥有的变量中的字符串是有效的 XML。如果您在理解错误消息时遇到问题:您在$field.

您唯一需要做的就是将有效的 XML 放入该变量中。

最好首先找出该变量内部的确切内容。然后,您可以将其与您的预期进行比较,您可能会立即发现问题并解决它。

HTH。

(提示:如果您发现后仍然碰壁,请提供 的十六进制转储$field)。

于 2013-04-05T21:23:26.520 回答