对代码的修改,使其可以一次加载多个XML文件.给出了完整的PHP、XML、XSLT代码


Modification to a code so it can load more than one XML file at once. Full PHP, XML, XSLT code is given

我正在尝试构建一个脚本,该脚本获取不同结构的XML,并创建一个包含所有数据的唯一XML。一个关键点是,我使用XSLT重命名/转换节点/元素,因为正如我所说,源XML具有不同的结构。因此,新生成的XML有一个通用结构供我正确使用。

我的问题是如何修改它以生成多个XML的结果?

XML将是相对路径或绝对路径。

<?php
// create an XSLT processor and load the stylesheet as a DOM 
$xproc = new XsltProcessor();
$xslt = new DomDocument;
$xslt->load('stylesheet.xslt');    // this contains the code from above
$xproc->importStylesheet($xslt);

// DOM or the source XML
$xml = '';
$dom = new DomDocument;
$dom->loadXML($xml);

?>

嗯。嗯,剥这只猫皮的方法太多了,但有两种明显的方法;

  1. 通过XSLT层。这需要XSLT技能
  2. 通过导入XML文件PHP层。这需要PHP技能

第一个解决方案意味着您找到要处理的所有文件的列表,然后从中创建一个XML文件列表,将其传递给XSLT处理器;

<list>
   <file src="..." />
   <file src="..." />
   <file src="..." />
</list>

现在,您循环浏览(或匹配)这些文件,并使用以下内容;

<xsl:template match="file">
   <xsl:apply-templates select="document(@src)/*" />
</xsl:template>

另一种解决方案是找到所有文件,并将它们绑定在一个更大的XML中;

$xml = "<all_files>" ;
foreach ( $files as $file )
   $xml .= file_get_contents ( $file ) ;
$xml .= "</all_files>" ;

让XSLT像往常一样应用模板。这显然需要一些清理(比如删除XML声明和内联命令(如果有的话),可能还有DTD和一些实体内容,但这并不太难)

这两种解决方案都需要调整。你的技能是什么?你喜欢做什么?你需要它来节省内存吗?快速的简明的灵活的