我正在尝试构建一个脚本,该脚本获取不同结构的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);
?>
嗯。嗯,剥这只猫皮的方法太多了,但有两种明显的方法;
- 通过XSLT层。这需要XSLT技能
- 通过导入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和一些实体内容,但这并不太难)
这两种解决方案都需要调整。你的技能是什么?你喜欢做什么?你需要它来节省内存吗?快速的简明的灵活的