在更新现有文件时创建新的XML文件

时间:2014-09-24 20:37:46

标签: php xml

我已经阅读了很多关于这个主题的相关问题,似乎找不到一个突出显示保存到2个单独的XML文件的问题。

我正在上传电子书时创建一个新的XML文件。对于此示例,它将保存在“new_file.xml”中。同时,我需要将新信息(在此示例中为<product>)添加到名为“full_collection_file.xml”的完整集合文件中,并对该文件进行更新。因此,每次上传新电子书时,“full_collection_file.xml”都会添加一个新的<product>

这是简单的“new_file.xml”的当前结构:

$xml = new DomDocument('1.0', 'UTF-8');

$message = $xml->createElement('ONIXMessage');
$release = $xml->createAttribute('release');
$release->value = '3.0';
$message->appendChild($release);

$header = $xml->createElement('Header');
$FromCompany = $xml->createElement('FromCompany','My Company');
$header->appendChild($FromCompany);
$FromEmail = $xml->createElement('FromEmail','support@ebooks.com');
$header->appendChild($FromEmail);
$SentDate = $xml->createElement('SentDate','201408181805');
$header->appendChild($SentDate);
$message->appendChild($header);

$product = $xml->createElement('Product');
$RecordReference = $xml->createElement('RecordReference','B00BBE4BFE'); 
$product->appendChild($RecordReference);
$NotificationType = $xml->createElement('NotificationType','03');
$product->appendChild($NotificationType);  
$message->appendChild($product);

$xml->appendChild($message);

$xml->save('new_file.xml');

这可以很好地创建第一个XML文件(“new_file.xml”),但无论我在同一区域内尝试做什么,我似乎都无法正确加载和更新“full_collection_file.xml”。我应该尝试分别完成这两件事,而不是同时完成吗?似乎多余,但我希望你可以同时有2个DomDocument文件。

2 个答案:

答案 0 :(得分:1)

您只需要第二个DomDocument对象,然后导入新的Product节点,并将其附加到所需位置:

$doc = new DomDocument('1.0', 'UTF-8');
$doc->load('full_collection_file.xml');
$node = $doc->importNode($product, true);
$doc->documentElement->appendChild($node);

显然,如果您不想在<Product>的文档元素处找到新的full_collection_file.xml节点,那么您将要相应地更改该最后一行。

答案 1 :(得分:0)

从TML更新:

$xml = new DomDocument('1.0', 'UTF-8');

$message = $xml->createElement('ONIXMessage');
$release = $xml->createAttribute('release');
$release->value = '3.0';
$message->appendChild($release);

$header = $xml->createElement('Header');
$FromCompany = $xml->createElement('FromCompany','My Company');
$header->appendChild($FromCompany);
$FromEmail = $xml->createElement('FromEmail','support@ebooks.com');
$header->appendChild($FromEmail);
$SentDate = $xml->createElement('SentDate','201408181805');
$header->appendChild($SentDate);
$message->appendChild($header);

$product = $xml->createElement('Product');
$RecordReference = $xml->createElement('RecordReference','B00BBE4BFE'); 
$product->appendChild($RecordReference);
$NotificationType = $xml->createElement('NotificationType','03');
$product->appendChild($NotificationType);  
$message->appendChild($product);

$xml->appendChild($message);
$xml->save('new_file.xml');

$full_xml = new DomDocument('1.0', 'UTF-8');
$full_xml->load('full_collection_file.xml');
$node = $full_xml->importNode($product, true);
$full_xml->documentElement->appendChild($node);
$full_xml->save('full_collection_file.xml');