我有一个xml文件,其中包含feed中mutliple级别的属性/标签,但是simplexml没有在print_r
转储中显示它们。
示例:
<types tag1="1287368759" tag2="1287368759">
<locations>
<segment prefix="http" lastchecked="0">www.google.com</segment>
<segment prefix="http" lastchecked="0">www.google.com</segment>
<segment prefix="http" lastchecked="0">www.google.com</segment>
<segment prefix="http" lastchecked="0">www.google.com</segment>
<segment prefix="http" lastchecked="0">www.google.com</segment>
</locations>
</types>
问题是<types>
中的标记工作正常并显示在xml转储中,但是每个段中的标记都不存在。有什么帮助吗?
答案 0 :(得分:2)
SimpleXML更像是一种资源,因此var_dump
ing / print_r
将不会产生任何可用的结果。
一个简单的foreach($xml->types->segment->locations as $location)
应该可以循环遍历您的位置,并使用getAttributes()
获取节点的属性。
我建议仔细看看这些例子&amp;手册中的函数(也请查看注释),因为在你知道如何使用SimpleXML之后可能很简单,你需要一些如何使用它的背景,因为通常的内省是不可能的。
答案 1 :(得分:0)
如果元素中包含普通数据,SimpleXML将不显示属性,您需要使用以下示例:
<?php
$xml = '<types tag1="1287368759" tag2="1287368759">
<locations>
<segment prefix="http" lastchecked="0"><![CDATA[www.google.com]]></segment>
<segment prefix="http" lastchecked="0"><![CDATA[www.google.com]]></segment>
<segment prefix="http" lastchecked="0"><![CDATA[www.google.com]]></segment>
<segment prefix="http" lastchecked="0"><![CDATA[www.google.com]]></segment>
<segment prefix="http" lastchecked="0"><![CDATA[www.google.com]]></segment>
</locations>
</types>';
$xml_data = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
print_r($xml_data);
foreach ($xml_data->locations->segment as $segment) {
print $segment['prefix'] . ' - ' . ((string) $segment) . "\n";
}
我不确定为什么会这样,但我发现这有效,
希望它有所帮助。