从PHP循环生成XML文件

时间:2018-02-07 16:57:56

标签: php xml loops foreach livesearch

我正在为常见问题解答构建一个livesearch,为了做到这一点,我需要一个XML文档来存储livesearch建议。

问题是常见问题解答会经常更新,我不想每次都要触摸代码。

因此,我正在尝试创建一个PHP文件,在我们打开它时会生成一个新的XML文件。由于不同文件夹中有许多FAQ项,我需要脚本自动查找某些目录中的所有FAQ项。 FAQ项目存储在TXT文件中,这些文件存储在使用数字作为文件名(1,2,3等)的目录中,因此我可以轻松添加/修改/删除它们。

路径如下所示: faqs / professionals / 1 / question.txt faqs / professionals / 2 / question.txt 对于第二个常见问题解答项目 faqs / students / 1 / question.txt ,查看其他主题中的常见问题项目。

例如,如果我想添加一个新的常见问题项目,我只想创建一个文件夹,让我们说" 3",并在里面添加2个文本文件(问题。 txt answer.txt )。然后,我将运行PHP脚本,以便XML文件更新建议,同时考虑新的FAQ项目" 3"。

我能够创建一个基于TXT文件内容构建XML文件的脚本。但是,我无法做到"检测"所有文件夹(FAQ项目所在的位置)并将它们添加到XML文件中。

该脚本基于此页面:w3schools.com/php/php_ajax_livesearch.asp

以下是代码:

<?php 
foreach (glob("../faqs/professionals/*",GLOB_ONLYDIR) as $x) {
  $pages = array(); 
  $pages [] = array( 
  'title' => file_get_contents($x.'/question.txt'), 
  'url' => dirname($x),
  );   
}

  $doc = new DOMDocument(); 
  $doc->formatOutput = true; 

  $r = $doc->createElement( "pages" ); 
  $doc->appendChild( $r ); 

  foreach( $pages as $link ) 
  { 
  $b = $doc->createElement( "link" ); 

  $title = $doc->createElement( "title" ); 
  $title->appendChild( 
  $doc->createTextNode( $link['title'] ) 
  ); 
  $b->appendChild( $title ); 

  $url = $doc->createElement( "url" ); 
  $url->appendChild( 
  $doc->createTextNode( $link['url'] ) 
  ); 
  $b->appendChild( $url ); 

  $r->appendChild( $b ); 
  } 

  echo $doc->saveXML(); 
  $doc->save("links.xml") 
  ?>

一旦这个脚本工作,我会尝试让livesearch在点击建议时显示文本输入下面的answer.txt的内容。但这已经是另一个问题......

任何帮助将不胜感激。 :)

1 个答案:

答案 0 :(得分:0)

我认为问题在于,当您构建第一个$pages数组时,使用dirname($x)。这是获取目录的目录名称。因此,glob()返回faq/professionals/1的路径,并且您获取此目录名称,最终得到faq/professionals

所以我认为您需要改变的是设置网址...

$pages [] = array(
   'title' => file_get_contents($x.'/question.txt'),
   'url' => $x
);