我有1200+ XML格式,我需要将其合并到一个不同格式的XML文件中。各个文件都位于一个目录中。我正在处理的服务器有SimpleXML,我尝试使用我在网上找到的一些不同的合并示例(http://www.nicolaskuttler.com/post/merging-and-splitting-xml-files-with-simplexml/,但是当我查看'合并'的XML文件时,只有第一个XML文件已添加到它。我无法获得多个文件来“合并”我的几次尝试。
单个文件的格式:
<?xml version="1.0" encoding="UTF-8"?>
<pr:press_release xmlns:alf="http://www.alfresco.org" xmlns:chiba="http://chiba.sourceforge.net/xforms" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:pr="http://www.bowl.com/pr" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<pr:headline>TITLE</pr:headline>
<pr:title>TITLE</pr:title>
<pr:contact_info xsi:nil="true"/>
<pr:department>DEPT</pr:department>
<pr:body>BODY</pr:body>
<pr:launch_date>YYYY-MM-DD</pr:launch_date>
<pr:expiration_date>YYYY-MM-DD</pr:expiration_date>
<pr:category>CATEGORY</pr:category>
<pr:tags>KEYWORDS</pr:tags>
</pr:press_release>
新文件所需的格式:
<?xml version="1.0" encoding="utf-8"?>
<contents>
<content>
<title>TITLE</title>
<summary></summary>
<body>
<root>
<date></date>
<author></author>
<department></department>
<location></location>
<story>BODY</story>
</root>
</body>
</content>
</contents>
用于合并两个文件的代码:
<?php
$file1 = '1027coachintermediate.xml';
$file2 = '1027coachelite.xml';
$fileout = 'fileout.xml'; $xml1 = simplexml_load_file( $file1 );
$xml2 = simplexml_load_file( $file2 ); // loop through the FOO and add them and their attributes to xml1
foreach( $xml2->FOO as $foo ) {
$new = $xml1->addChild( 'FOO' , $foo );
foreach( $foo->attributes() as $key => $value ) {
$new->addAttribute( $key, $value );
}
} $fh = fopen( $fileout, 'w') or die ( "can't open file $fileout" );
fwrite( $fh, $xml1->asXML() );
fclose( $fh );
?>
答案 0 :(得分:0)
如果这是一次性任务,那么您可以将所有文件连接在一起,然后在连接文件上运行一个简单的XSLT进程。
1)用于连接文件的Shell脚本
for file in `ls $XMLDIR`
do
cat $file | grep -v "xml version" >> big_concat_file.xml
done
2)手动编辑concat文件以放置根包装标签。
<document>
<pr:press-release>
....
</pr:press-release>
<pr:press-release>
...
</pr:press-release>
</document>
3)在连接文件
上运行XSLT文件答案 1 :(得分:0)
确定无法确定错误的位置,但下面的脚本可以帮助您根据规范合并文件:
<?php
$files = array( 'in1.xml', 'in2.xml');
$xml = new SimpleXMLElement(<<<XML
<?xml version="1.0" encoding="utf-8"?>
<contents>
</contents>
XML
);
foreach( $files as $filename) {
$xml_int = simplexml_load_file( $filename );
$conts = $xml_int->children('pr',true);
$content = $xml->addChild( 'content'); // add content
$content->addChild( 'title',$conts->title); // add first title
// add the rest of the content insides
// ...
}
var_export($xml->asXML());
?>
输出
<?xml version="1.0" encoding="utf-8"?>
<contents><content><title>TITLE1</title></content><content><title>TITLE2</title></content></contents>
请参阅:http://pl.php.net/manual/en/simplexml.examples-basic.php了解更多信息
另一个问题是,如果你真的想将整个xml保留在内存中。您可以将$content->asXML()
逐个附加到文件中。