【问题标题】:How to traverse xml in php如何在php中遍历xml
【发布时间】:2012-11-12 12:51:55
【问题描述】:

我正在使用以下功能

function file_get_contents_curl($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);       

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}
$myTestingUrl = file_get_contents_curl("myUrl");

运行该功能后,我有

$myTestingUrl =
<?xml version="1.0" encoding="UTF-8"?>
<map>
    <entry key="keyName">
        <entry key="ActionUrl">http://www.my_actionUrl.com/</entry>
    </entry>
</map>

您能告诉我如何遍历 $myTestingUrl 以获取 php 变量中的条目键“ActionUrl”(http://www.my_actionUrl.com/)的内容吗?

谢谢!

【问题讨论】:

标签: php xml xml-parsing


【解决方案1】:

试试

$xml = simplexml_load_string($myTestingUrl );
$items = $xml->xpath('/map/entry/entry[@key="ActionUrl"]/text()');
echo $items[0];

【讨论】:

  • 好一个!这里有更多关于simpleXML的信息
  • 在最后一行我收到以下错误:注意:未定义索引:0
  • eval.in/2767复制代码并尝试它是否有效。如果它正常工作,那么echo 你的 xml 并检查它是否有任何差异。
  • 似乎我的服务器禁用了 simpleXml。两种解决方案都有效!非常感谢! :) 附言。在我的服务器上只是 echo $xml->entry->entry.PHP_EOL;是显示正确的值。
【解决方案2】:

我更喜欢 @air4x 的 XPath 方法,但这里没有 XPath - 目的是在 SimpleXML 中显示元素和属性访问:

Codepad demo

$obj = simplexml_load_string($myTestingUrl);

foreach($obj->entry as $entry)
{
    if(isset($entry->entry))
    {
        foreach($entry->entry->attributes() as $key => $value)
        {
            if($key == 'key' && $value == 'ActionUrl')
            {
                echo 'ActionUrl is: ' . (string)$entry->entry;
                break 1;
            }
        }
    }
}

【讨论】:

  • 我得到一个空白页,但没有答案。我做了以下步骤:echo $myTestingUrl; (prints out &lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;map&gt;&lt;entry key="keyName"&gt;&lt;entry key="ActionUrl"&gt;http://urlllll/library.xml&lt;/entry&gt;&lt;/entry&gt;&lt;/map&gt;) $obj = simplexml_load_string($myTestingUrl); foreach($obj-&gt;entry as $entry){ if(isset($entry-&gt;entry)){ foreach($entry-&gt;entry-&gt;attributes() as $key =&gt; $value){ if($key == 'key' &amp;&amp; $value == 'ActionUrl'){ echo 'ActionUrl is: ' . (string)$entry-&gt;entry; break 1; } } } }
  • @CSSensei 您在其他代码中一定有错误,此代码有效(如在键盘演示中所见)。查看您的错误日志。
  • 我的页面上没有其他代码用于测试它。在键盘上有修剪功能。提取工作是否必须这样做?
  • 尝试添加像simplexml_load_string(trim($myTestingUrl))这样的修剪,我在演示中使用了它,因为我在开始的xml标记之前添加了一个换行符,只是为了便于阅读。
  • 似乎我的服务器禁用了 simpleXml。两种解决方案都有效!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2021-07-09
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 2021-11-12
相关资源
最近更新 更多