将节点添加到现有XML

时间:2013-05-10 10:47:26

标签: php xml append edit nodes

我遇到的问题是每次写入XML时都会生成Root XML。 主要问题是设置Child和Defining Root。在Łza的帮助下 我现在明白了Root XML Node被忽略了。 那么你设置并创建一个Child然后添加你的内容,并且正确格式的例子是。

$xml = simplexml_load_file('FILENAME.xml');  // Load XML File Need to add IF Statment to create if does not exist

$result = $xml->addchild('Result'); // Ignore Root NODE and Add Child Results

$result->addChild('Time', gmdate('D-M-Y -H:i:s')); // Rest of the below adds Child to Result and outputs results
$result->addChild('Channel', $Site);
$result->addChild('Type', '**');
$result->addChild('Process', $Status);
$result->addChild('SKU', $code->SKU);
$result->addChild('item', $item);
$result->addChild('Status', '$Feedback');
$result->addChild('ErrorID', '$Error');
$result->addChild('Message', '$Message');

$xml->asXml('FILENAME.xml');  //Write to file would be

// All of the above Code is using variables from another part of the script

输出为

<Root>
    <Result>
        <Time>Fri-May-2013 -09:15:22</Time>
        <Channel>20</Channel>
        <Type>**</Type>
        <Process>Update</Process>
        <SKU>98746524765</SKU>
        <Item/>
        <Status>Problem</Status>
        <ErrorID>999-Error</ErrorID>
        <Message>Unknown file format support</Message>
    </Result>
    <Result>
        <Time>Fri-May-2013 -09:15:22</Time>
        <Channel>20</Channel>
        <Type>**</Type>
        <Process>Update</Process>
        <SKU>5412254785</SKU>
        <Item/>
        <Status>Problem</Status>
        <ErrorID>123-Error</ErrorID>
        <Message>Invalid Item</Message>
    </Result>
</Root>

由于

1 个答案:

答案 0 :(得分:0)

尝试使用SimpleXMLElement库而不是硬编码的xml创建。这可能在开始时使用起来更复杂,但更安全(我的意思是当你对xml进行硬编码时避免xml结构中可能出现的错误)并且当你刚开始使用它时很容易使用。 并且很容易添加/删除节点,子节点。

这是您的代码的示例:

$xml = new SimpleXMLElement('<xml/>');

$data = $xml->addChild('data');
$result = $data->addChild('Result');
$result->addChild('Time', gmdate('D-M-Y -H:i:s'));
$result->addChild('Channel', $SiteID);

// ... and the same way create all your xml nodes.
// if you want add next <result> node witch all elements repeat the code, (or put it in loop if you want more <result> elements):
$result = $data->addChild('Result');
$result->addChild('Time', gmdate('D-M-Y -H:i:s'));
$result->addChild('Channel', $SiteID);

// and after create all nodes save the file:
$xml->asXml('DHError.xml'); 

上面的代码将创建xml:

 <xml>
  <data>
   <Result>
     <Time>Fri-May-2013 -12:14:39</Time> 
     <Channel>data</Channel> 
   </Result>
   <Result>
     <Time>Fri-May-2013 -12:14:39</Time> 
     <Channel>data</Channel> 
   </Result>
  </data>
 </xml>

多数民众赞成。然后,如果您需要加载和处理xml,那将很容易:

要加载文件,只需使用:

$xml2 = simplexml_load_file('DHError.xml');

// to add new node <Result>:
$resultNext = $xml2->data->addchild('Result');
$resultNext->addChild('Time', gmdate('D-M-Y -H:i:s'));
$resultNext->addChild('Channel', $SiteID);

//and save file
$xml2->asXml('DHError.xml');

这创建了一个xml:

<?xml version="1.0" ?> 
 <xml>
  <data>
   <Result>
     <Time>Fri-May-2013 -12:27:24</Time> 
     <Channel>data</Channel> 
   </Result>
   <Result>
     <Time>Fri-May-2013 -12:27:24</Time> 
     <Channel>data</Channel> 
  </Result>
  <Result>
    <Time>Fri-May-2013 -12:27:24</Time> 
    <Channel>data</Channel> 
  </Result>
 </data>
</xml>