php - simplexml问题

时间:2010-10-18 05:45:18

标签: php simplexml

我有一个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转储中,但是每个段中的标记都不存在。有什么帮助吗?

2 个答案:

答案 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";
}

我不确定为什么会这样,但我发现这有效,

希望它有所帮助。