【问题标题】:take certain nodes from one xml file and save to another从一个 xml 文件中获取某些节点并保存到另一个
【发布时间】:2013-04-30 07:39:41
【问题描述】:

我有一个问题,也许有人可以帮助我。我不是一个经验丰富的程序员,但我可以得到高级答案,这样我就可以了解更多。

我下载了一个 xml 文件,打开并阅读它。当满足特定条件时,我会更改该节点中的值,这可以正常工作。但在那之后,我想将我刚刚更改的整个节点写入一个新的 xml 文件,这就是我遇到问题的地方。我设法存储了最后一个节点,这表明我一直在新文档中写入现有节点。

这是我的代码:

$prodsToSave = new DOMDocument(); //my new document
$prods = new DOMDocument(); 
$prods = simplexml_load_file('http://urltofile.com');

foreach ($prods as $product) {
    if($product->merchantCategoryName == 'CD') { 
        $productToSave = $product;
        $productToSave->merchantCategoryName = 'Musik > CD';
        $prodsToSave=$productToSave;
    }
    $prodsToSave->saveXML('newdocument.xml');
}

我知道为什么我只有一个节点写入新文档但我不知道如何更改它所以我将所有节点都放入新文档中?

【问题讨论】:

  • 为什么要用 simplexml 对象替换 domdocument ($prods)?这与彼此无关..
  • 重复,检查这个问题stackoverflow.com/questions/6001923/…。仅供参考,DOMDocument::saveXML 不接受文件名作为参数,它只返回给定对象的 XML。为了将其写入文件,请使用 file_put_contents 之类的函数。
  • 那么,Yordi,它应该如何运作,有什么想法吗? Rolando:我不同意,它不是重复的,但如果你认为是重复的,请接受该信息并应用到我的问题并回答它:)
  • 不过我会研究一下 file_put_content 函数,谢谢!

标签: php xml


【解决方案1】:

设置一个变量然后再次直接覆盖它是多余的:

 $a = 'something really cool';
 $a .= ' and awsome.';
 $a = $b;

你可以把这段代码压缩到最后一行:

 $a = $b;

那么还剩下什么?

$prods = simplexml_load_file('http://urltofile.com');

foreach ($prods as $product) {
    if ($product->merchantCategoryName != 'CD') { 
        continue;
    }
    $product->merchantCategoryName = 'Musik > CD';
    $product->saveXML('newdocument.xml');
}

如果你减少代码,你也更容易阅读和理解它。因此,您应该不时花时间审查和减少您自己的代码。

希望对你有帮助。

【讨论】:

  • 感谢所有答案,但恐怕我仍然无法正常工作。我想知道,删除现有 xml 文件的其余部分是否更容易编写一个新文件?类似于: if($product->merchantCategoryName == 'CD') { $productToSave->merchantCategoryName = 'Musik > CD'; } //在检查完所有 if 语句后,只需删除那些未更改的节点。有没有人知道如何做到这一点?干杯!
  • @Lars:我会说这取决于上下文。如果您无法使其工作,那么您可能更容易接受您的建议以删除其他所有内容。最后,您可以保存到相同或不同的文件名。所以你可以随心所欲。
猜你喜欢
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 2012-08-16
  • 2020-01-03
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多