$xml = simplexml_load_string($value);
$json = json_encode($xml); // convert the XML string to JSON
$array = json_decode($json,TRUE);
转换为数组后缺少属性。
答案 0 :(得分:0)
您所说的<SampleData>
值是经过编码的,这是将其恢复为“正常”状态的最简单方法。是在将字符串加载到htmlspecialchars_decode()
之前使用SimpleXML
转换所有符号。下面的代码执行此操作,然后输出数据的各个部分作为如何显示信息的示例......
$source = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=biosample&id=367368";
$value = file_get_contents($source);
$value = htmlspecialchars_decode($value);
$xml = simplexml_load_string($value);
// Access the DbBuild value
echo "DbBuild=".(string)$xml->DocumentSummarySet->DbBuild.PHP_EOL;
// The BioSample publication date attribute
echo "BioSample publication date=".(string)$xml->DocumentSummarySet->DocumentSummary->SampleData->BioSample['publication_date'].PHP_EOL;
// List the attributes name and value
foreach ( $xml->DocumentSummarySet->DocumentSummary->SampleData->BioSample->Attributes->Attribute as $attribute ) {
echo (string)$attribute['attribute_name']."=".(string)$attribute.PHP_EOL;
}
某些XML访问看起来很长,但它只是访问文档中各种级别数据的情况。 $xml->DocumentSummarySet
访问根元素下的<DocumentSummarySet>
元素。 BioSample['publication_date']
是<BioSample>
元素中的publication_date属性,依此类推。
答案 1 :(得分:0)
有一个非常简单的解决方案 - 删除这两行代码:
$json = json_encode($xml); // convert the XML string to JSON
$array = json_decode($json,TRUE);
XML,JSON和PHP数组都有关于可以表示哪种结构的不同规则,因此在它们之间任意转换总是最终会出现您丢失数据的边缘情况。正如名称所示,SimpleXML设计为易于使用,因此实际使用它会更好:
$xml = simplexml_load_string($value);
// Now access your data from $xml; no further conversion is needed
由于您未提供有关XML的外观的更多信息,因此我无法提供有关如何处理XML的更多信息,但有extensive examples in the PHP manual和refer here if there are namespaces (tags or attributes with :
in their name)。