我在一个名为“jobs”的网站目录文件夹中有多个xml文件,我一直在尝试将该jobs文件夹中的任何xml文件合并到一个名为Output.xml的xml文件中
PHP代码我部分工作但是我的问题是它没有将该jobs目录中的所有xml文件组合到output.xml中,除非我指定了文件名。现在我有点卡住,因为我不知道为什么它只在output.xml中显示一个。
这里有一些示例代码:
XML1
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
XML2
<JobRecords>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
XSLT(将.xsl文件保存在与所有XML文件相同的目录中)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<files>
<xsl:copy-of select="/jobs"/>
<!-- add more as needed -->
</files>
</xsl:template>
</xsl:stylesheet>
PHP(加载第一个XML和XSL脚本,然后转换/输出)
// LOAD XML SOURCE
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->load('xml1.xml');
// LOAD XSL SOURCE
$xsl = new DOMDocument('1.0', 'UTF-8');
$xsl->load('XSLT_Script.xsl');
// TRANSFORM XML
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
$newXML = $proc->transformToXML($xml);
// SAVE NEW XML
file_put_contents('output.xml', $newXML);
答案 0 :(得分:0)
我确信有一种更干净的方法,但你可以使用数组scandir http://php.net/manual/en/function.scandir.php来获取目录中的所有文件名(如果除了xml文件之外还有其他文件,你可以将它们过滤掉)然后迭代通过他们的功能。
答案 1 :(得分:0)
您可以直接从php应用程序运行此unix命令以生成文件:
(head -1 xml1; xmllint -xpath '//JobRecord' xml2 xml1; tail -1 xml1) | xmllint --format - > newXML.xml
演示:
more xml1 xml2
::::::::::::::
xml1
::::::::::::::
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
::::::::::::::
xml2
::::::::::::::
<JobRecords>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
$ (head -1 xml1; xmllint -xpath '//JobRecord' xml2 xml1; tail -1 xml1) | xmllint --format -
<?xml version="1.0"?>
<JobRecords>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
使用正确的xpath直接使用某些xml解析器并重构输出XML页眉/页脚会更容易。
要从php
应用程序运行shell命令,请检查以下链接:PHP shell_exec() vs exec()