PHP / SimpleXML没有显示所有内容

时间:2014-10-07 21:26:46

标签: php simplexml

我有以下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     )

)

)

当我直接在浏览器中打开链接时,我会获得更多内容。我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

  

我在这里做错了什么?

SimpleXMLElement 上使用print_rvar_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 对象而不是arraystdClass {{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.