首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在php中组合XML文件

在php中组合XML文件
EN

Stack Overflow用户
提问于 2018-02-21 19:49:04
回答 2查看 1.6K关注 0票数 0

我得到了外部xml文件(通过文件交换),我能够读取和存储在数据库(php/mysql)。xml文件以不同的名称压缩,有时几个文件被压缩到一个文件夹中

当文件夹中只有1个xml文件时,我可以使用以下命令成功解压缩并读取内容

代码语言:javascript
复制
 $path = '/xmlFile'; 
   //the xmlFile names are in this format : xmFile-00001235.xml, 
   //xmlFile-000012390.xml, etc.   only first portions are consistent

   foreach (glob($path.'/xmlFile-*.xml') as $filename) 

  {
  $xml=file_get_contents($filename);    

   }
   //store in database and unlink the xml file

这只在文件夹有一个xml文件时有效,因为我在存储后取消了xml文件的链接,它取消了所有文件的链接,但只存储了一个文件

最好的方法是什么;我正在考虑检查文件夹中是否有超过1个xml并合并这些xml文件?也许一个样本解决方案真的会有帮助,

示例xml如下所示

xml1.xml

代码语言:javascript
复制
<sales>
    <row id="000001" saleid="267158" amountSold="2000"  />
    <row id="000001" saleid="267159" amountSold="80.000" />
 </sales>

xml2.xml

代码语言:javascript
复制
  <sales>
    <row id="000001" saleid="267160" amountSold="4000"  />
    <row id="000001" saleid="267161" amountSold="580" />
   </sales>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-21 19:58:59

合并多个文件可以像这样完成...

代码语言:javascript
复制
function mergeFile ( DOMDocument $target, $fileName )    {
    $source = new DOMDocument();
    $source->load($fileName);

    foreach ( $source->getElementsByTagName("row") as $row )   {
        $import = $target->importNode($row, true);
        $target->documentElement->appendChild($import);
    }
}

$target = new DOMDocument();
$target->loadXML('<?xml version="1.0" encoding="utf-8"?><sales></sales>');
mergeFile($target, "NewFile.xml");
mergeFile($target, "NewFile1.xml");
mergeFile($target, "NewFile2.xml");

$target->save("out2.xml");

这允许您继续将所有文件添加在一起,然后在最后保存它们。

票数 1
EN

Stack Overflow用户

发布于 2018-02-21 19:55:21

基于Merge XML files in PHP中的答案

代码语言:javascript
复制
$doc1 = new DOMDocument();
$doc1->load('1.xml');

$doc2 = new DOMDocument();
$doc2->load('2.xml');

// get 'res' element of document 1
$res1 = $doc1->getElementsByTagName('items')->item(0); //edited res - items

// iterate over 'item' elements of document 2
$items2 = $doc2->getElementsByTagName('item');
for ($i = 0; $i < $items2->length; $i ++) {
    $item2 = $items2->item($i);

    // import/copy item from document 2 to document 1
    $item1 = $doc1->importNode($item2, true);

    // append imported item to document 1 'res' element
    $res1->appendChild($item1);

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48905154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档