Могу ли я включить элемент из XML-файла с php? - PullRequest
2 голосов
/ 22 августа 2011

У меня есть список, состоящий из ссылок, выглядящих следующим образом:

<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 Ответ

3 голосов
/ 22 августа 2011

Вы должны быть в состоянии сделать это с 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() или использовать array_unique() после foreach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...