我可以用php包含xml文件中的元素吗?

时间:2011-08-22 18:22:00

标签: php xml post dynamic

我有一个列表,包含如下链接:

<a href=index.php?p=page_1>Page 1</a>
<a href=index.php?p=page_2>Page 2</a>
<a href=index.php?p=page_3>Page 3</a>

单击时,由于此脚本,它们在我的页面上包含一个页面(page_1.inc.php或page_2.inc.php或page_3.inc.php):

<?php
  $pages_dir = 'pages';

  if(!empty($_GET['p'])){
      $pages = scandir($pages_dir, 0);
      unset($pages[0], $pages[1]);

      $p = $_GET['p'];

      if (in_array($p.'.inc.php', $pages)){
          include ($pages_dir.'/'.$p.'.inc.php');
      }
      else {
          echo 'Sorry, could not find the page!';
      }
  }
  else {
      include($pages_dir.'/home.inc.php');
  }
?>

周期。
我还有一个xml文件,如下所示:

<program>
    <item>
        <date>27/8</date>
        <title>Page 1</title>
        <info>This is info text</info>
    </item>
    <item>
        <date>3/9</date>
        <title>Page 2</title>
        <info>This is info text again</info>
    </item>
    <item>
        <date>10/9</date>
        <title>Page 3</title>
        <info>This just some info</info>
    </item>
</program>

这就是我想要实现的目标:
如果我点击“第1页”链接,它将在页面上显示“这是信息文本” 如果我点击链接“第2页”,它将在页面上显示“这是信息文本” 如果我点击“第3页”链接,它将在页面上显示“这只是一些信息”。

我清楚了吗? 对此有什么解决方案吗?

1 个答案:

答案 0 :(得分:3)

您应该可以使用SimpleXMLElement方法使用xpath()执行此操作。

$xmlString = file_get_contents("path/to/xml/file.xml");
$xml = new SimpleXMLElement($xmlString);
$info = $xml->xpath("/program/item[title='Page " . $page . "']/info");
echo (string) $info[0];

<强>更新

要获得所有日期的数组,您可以执行以下操作:

$xmlString = file_get_contents("path/to/xml/file.xml");
$xml = new SimpleXMLElement($xmlString);
$results = $xml->xpath("/program/item/date");

$dates = array();
if (!empty($results)) {
    foreach ($results as $date) {
        array_push($dates, (string) $date); // It's important to typecast from SimpleXMLElement to string here
    }
}

此外,如果需要,您可以将逻辑与第一个和第二个示例结合起来。您可以将$xml对象重用于多个XPath查询。

如果您需要$dates是唯一的,您可以在执行in_array()之前添加array_push()检查,也可以在foreach之后使用array_unique()