我有以下PHP代码:
<?php
$url = 'https://api.datamarket.azure.com/Data.ashx/opendata.rdw/VRTG.Open.Data/v1/KENT_VRTG_O_DAT(\'96TDR3\')';
$xml = simplexml_load_file($url);
print_r($xml);
?>
输出是:
SimpleXMLElement Object
(
[id] => https://api.datamarket.azure.com/Data.ashx/opendata.rdw/VRTG.Open.Data/v1/KENT_VRTG_O_DAT('96TDR3')
[category] => SimpleXMLElement Object
(
[@attributes] => Array
(
[term] => opendata.rdw.VRTG.Open.Data.KENT_VRTG_O_DAT
[scheme] => http://schemas.microsoft.com/ado/2007/08/dataservices/scheme
)
)
[link] => SimpleXMLElement Object
(
[@attributes] => Array
(
[rel] => edit
[title] => KENT_VRTG_O_DAT
[href] => KENT_VRTG_O_DAT('96TDR3')
)
)
[title] => SimpleXMLElement Object
(
)
[updated] => 2014-10-07T21:22:59Z
[author] => SimpleXMLElement Object
(
[name] => SimpleXMLElement Object
(
)
)
[content] => SimpleXMLElement Object
(
[@ attributes] =&gt;排列 ( [type] =&gt;应用程序/ XML )
)
)
当我直接在浏览器中打开链接时,我会获得更多内容。我在这里做错了什么?
答案 0 :(得分:1)
我在这里做错了什么?
在 SimpleXMLElement 上使用print_r
或var_dump
与里面的实际内容 时,很容易混淆SimpleXMLElement 对象。
而不是
print_r($xml);
你必须使用
echo $xml->asXML();
显示已加载 SimpleXMLElement 对象的实际XML数据。
如果您在浏览器中回复它,则必须先使用view-source查看或,然后首先将其编码为HTML:
echo '<pre>', htmlspecialchars($xml->asXML()), '</pre>';
您可以将其与您拥有的对象(例如数据库)进行比较:
$dbh = new PDO("mysql:host=$hostname;dbname=mysql", $username, $password);
print_r($dbh);
也不会显示数据库的所有内容 - 即使它允许访问所有数据库内容。
这是因为 SimpleXMLElement 和 PDO 是对象而不是array
或stdClass
{{1} }或var_dump
会显示它们包含的所有数据。
答案 1 :(得分:0)
不确定您在这里要求的是什么,但如果您的代码没有任何错误。在浏览器中,输出应如下所示: SimpleXMLElement对象([id] =&gt; https://api.datamarket.azure.com/Data.ashx/opendata.rdw/VRTG.Open.Data/v1/KENT_VRTG_O_DAT('96TDR3')[category] =&gt; SimpleXMLElement对象([@attributes] =&gt;数组([term] =&gt; opendata.rdw.VRTG.Open .Data.KENT_VRTG_O_DAT [scheme] =&gt; http://schemas.microsoft.com/ado/2007/08/dataservices/scheme))[link] =&gt; SimpleXMLElement对象([@attributes] =&gt;数组([rel] =&gt;编辑[title] =&gt; KENT_VRTG_O_DAT [ href] =&gt; KENT_VRTG_O_DAT('96TDR3')))[title] =&gt; SimpleXMLElement Object()[更新] =&gt; 2014-10-07T21:44:15Z [作者] =&gt; SimpleXMLElement对象([0] =&gt; SimpleXMLElement Object())[content] =&gt; SimpleXMLElement对象([@attributes] =&gt;数组([type] =&gt; application / xml)))
这只是您在网址中尝试获取的XML文件的结构,而您的代码正是这样做的。如果要对其进行样式设置,则获取特定的子节点。
答案 2 :(得分:0)
$xmlContent='<?xml version="1.0" encoding="utf-8"?>
<DrugDescriptionStructure
xmlns="http://www.medicin.dk/Services"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DrugName>
<XHtml Version="1.0"
xmlns="http://www.w3.org/1999/xhtml">Aciclodan
</XHtml>
</DrugName>
<PharmaceuticalFormText>
<XHtml Title="Dispenseringsform" Version="1.0"
xmlns="http://www.w3.org/1999/xhtml">
<p>
<b>Creme.</b> 1 g indeholder 50 mg aciclovir.
</p>
</XHtml>
</PharmaceuticalFormText>
</DrugDescriptionStructure>';
$dom = new DomDocument();
$xml = simplexml_load_string($xmlContent);
$dom->loadXML($xml->asXML());
$result=$dom->getElementsByTagName('PharmaceuticalFormText');
echo "<pre>"; print_r($result[0]->nodeValue);
//output
Creme. 1 g indeholder 50 mg aciclovir.