我在数据库中有一个字符串字段,其值为:
<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>
但仍然是同样的例外。
答案 0 :(得分: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);
答案 1 :(得分:0)
我在数据库中也有有效的XML(也在磁盘上的某些文件中)。我可以发给你(如果你真的想看到它)。但是,在代码的上下文中只有有效的XML somewhere 才是完全没用的:
$xml = new SimpleXMLElement($field);
更重要的是,你所拥有的$field
变量中的字符串是有效的XML。如果您在理解错误消息时遇到问题:$field
中没有任何有效的XML。
您唯一需要做的就是将有效的XML放入该变量中。
通过首先找出该变量内部的确切内容,最有效。然后你可以将它与你的预测进行比较,你可能会立即发现问题并修复它。
HTH。
(提示:如果你发现后仍然碰壁,请提供hex-dump of $field
)。