【问题标题】:Extract node from XML like data without extra PHP libs从类似 XML 的数据中提取节点,无需额外的 PHP 库
【发布时间】:2009-07-08 22:00:18
【问题描述】:

我收到以下信息:

<links>
    <image_link>http://img357.imageshack.us/img357/9606/48444016.jpg</image_link>
    <thumb_link>http://img357.imageshack.us/img357/9606/48444016.th.jpg</thumb_link>
    <ad_link>http://img357.imageshack.us/my.php?image=48444016.jpg</ad_link>
    <thumb_exists>yes</thumb_exists>
    <total_raters>0</total_raters>
    <ave_rating>0.0</ave_rating>
    <image_location>img357/9606/48444016.jpg</image_location>
    <thumb_location>img357/9606/48444016.th.jpg</thumb_location>
    <server>img357</server>
    <image_name>48444016.jpg</image_name>
    <done_page>http://img357.imageshack.us/content.php?page=done&amp;l=img357/9606/48444016.jpg</done_page>
    <resolution>800x600</resolution>
    <filesize>38477</filesize>
    <image_class>r</image_class>
</links>

我希望尽可能简单地提取 PHP 中的 image_link。我该怎么做?

假设,我不能为 PHP 使用任何额外的库/插件。 :)

谢谢大家

【问题讨论】:

  • SimpleXML 是“额外”库吗?
  • 不,SimpleXML 是 PHP 内置的。

标签: php xml


【解决方案1】:

在 Josh 的回答中,问题不在于转义“/”字符。所以 Josh 提交的代码会变成:

$text = 'string_input';
preg_match('/<image_link>([^<]+)<\/image_link>/gi', $text, $regs);
$result = $regs[0];

以usoban的回答为例:

<?php

// Load the file into $content

$xml = new SimpleXMLElement($content) or die('Error creating a SimpleXML instance');

$imagelink = (string) $xml->image_link; // This is the image link

?>

我推荐使用 SimpleXML,因为它非常简单,而且正如 usoban 所说,它是内置的,这意味着它不需要任何外部库。

【讨论】:

    【解决方案2】:

    您可以使用 SimpleXML,因为它是用 PHP 构建的。

    【讨论】:

      【解决方案3】:

      使用正则表达式

      $text = 'string_input';
      preg_match('/<image_link>([^<]+)</image_link>/gi', $text, $regs);
      $result = $regs[0];
      

      【讨论】:

      • preg_match() 需要开始和结束分隔符
      • 好主意!但由于某种原因,我得到了未知修饰符“a”?
      • 那是因为你在 中有一个 /。它认为这是正则表达式的结尾,图像中的“i”是一个修饰符,但是当它到达“a”(不是一个有效的修饰符)时它会掉下来。要么转义分隔符中的任何正斜杠,要么使用不包含在模式中的不同分隔符(例如 ~ 或 |)
      • 对不起,我的意思是你有一个 / 在
      猜你喜欢
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      相关资源
      最近更新 更多