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

发布于 2024-11-30 17:41:11 字数 1479 浏览 0 评论 0原文

我有一个列表,由如下所示的链接组成:

<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 页”,它将在页面上显示“这只是一些信息”。

我说得足够清楚吗? 有什么解决办法吗?

I have a list, consisting of links looking like this:

<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>

When clicked they include a page (page_1.inc.php or page_2.inc.php or page_3.inc.php) on my page thanks to this script:

<?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');
  }
?>

Period.

I also have an xml file looking like this:

<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>

This is what I want to achieve:
If I click on the link "Page 1" it will display "This is info text" on the page.
If I click on the link "Page 2" it will display "This is info text again" on the page.
If I click on the link "Page 3" it will display "This just some info" on the page.

Was I clear enough?
Is there any solution for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

帅的被狗咬 2024-12-07 17:41:11

您应该能够使用 SimpleXMLElement 来执行此操作。 php.net/manual/en/simplexmlelement.xpath.php" rel="nofollow noreferrer">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 是唯一的,则可以在执行 array_push() 之前添加 in_array() 检查,或者可以使用 < foreach 之后的 code>array_unique() 。

You should be able to do this with SimpleXMLElement using the xpath() method.

$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];

Update:

To get an array of all dates you would do something like this:

$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
    }
}

Also, you could combine the logic, if needed, from the first and second examples. You can reuse the $xml object for multiple XPath queries.

If you need $dates to be unique, you can either add an in_array() check before doing the array_push() or you can use array_unique() after the foreach.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文