使用PHP将子项附加到XML上特定点的末尾
我试图将数据附加到下面XML中特定位置的末尾 我的XML要长得多,但例如,我想在标记为“Delete”的部分末尾追加数据。然后,我会在“Total Tickets”的末尾添加不同的数据,但如果我能够以某种方式找出如何将数据附加到第一个孩子的末尾,我就可以找出其余的数据使用PHP将子项附加到XML上特定点的末尾,php,xml,dom,Php,Xml,Dom,我试图将数据附加到下面XML中特定位置的末尾 我的XML要长得多,但例如,我想在标记为“Delete”的部分末尾追加数据。然后,我会在“Total Tickets”的末尾添加不同的数据,但如果我能够以某种方式找出如何将数据附加到第一个孩子的末尾,我就可以找出其余的数据 <report> <sets> <set> <legend>Delete</legend> <values> <value date="
<report>
<sets>
<set>
<legend>Delete</legend>
<values>
<value date="2012-06-24" data="9"/>
<value date="2012-06-25" data="17"/>
<value date="2012-06-26" data="15"/>
<value date="2012-06-27" data="10"/>
<value date="2012-06-28" data="8"/>
</values>
</set>
<set>
<legend>Total Tickets</legend>
<values>
<value date="2012-06-24" data="412"/>
<value date="2012-06-25" data="416"/>
<value date="2012-06-26" data="423"/>
<value date="2012-06-27" data="405"/>
<value date="2012-06-28" data="280"/>
</values>
</set>
</sets>
</report>
删除
总票数
下面是我为查看结果而编写的测试脚本。在本例中,我试图在图例“Delete”列表的末尾添加属性数据为“12345”的元素“value”
我得到的结果是:
<report>
<sets>
<set>
<legend>Delete</legend>
<values>
<value date="2012-06-24" data="9"/>
<value date="2012-06-25" data="17"/>
<value date="2012-06-26" data="15"/>
<value date="2012-06-27" data="10"/>
<value date="2012-06-28" data="8"/>
</values>
</set>
<set>
<legend>Total Tickets</legend>
<values>
<value date="2012-06-24" data="412"/>
<value date="2012-06-25" data="416"/>
<value date="2012-06-26" data="423"/>
<value date="2012-06-27" data="405"/>
<value date="2012-06-28" data="280"/>
</values>
</set>
</sets>
</report>
<value date="12345"/>
删除
总票数
我试图得到如下所示的数据:
<report>
<sets>
<set>
<legend>Delete</legend>
<values>
<value date="2012-06-24" data="9"/>
<value date="2012-06-25" data="17"/>
<value date="2012-06-26" data="15"/>
<value date="2012-06-27" data="10"/>
<value date="2012-06-28" data="8"/>
<value date="12345"/>
</values>
</set>
删除
我不确定如何将数据添加到该特定位置,而不是XML的最末端
我感谢任何人的帮助。试试这个:
原始XML文件(另存为'testFile.XML'):
<?xml version="1.0" encoding="utf-8"?>
<report>
<sets>
<set>
<legend>Delete</legend>
<values>
<value date="2012-06-24" data="9"/>
<value date="2012-06-25" data="17"/>
<value date="2012-06-26" data="15"/>
<value date="2012-06-27" data="10"/>
<value date="2012-06-28" data="8"/>
</values>
</set>
<set>
<legend>Total Tickets</legend>
<values>
<value date="2012-06-24" data="412"/>
<value date="2012-06-25" data="416"/>
<value date="2012-06-26" data="423"/>
<value date="2012-06-27" data="405"/>
<value date="2012-06-28" data="280"/>
</values>
</set>
</sets>
</report>
<?php
$dom = new DomDocument( '1.0' );
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
// load the xml file
$dom->load( 'testFile.xml', LIBXML_NOBLANKS );
$xpath = new DOMXPath($dom);
// prepare the xpath query to find the "values" node corresponding the
// "Delete" legend
$nodes = $xpath->query("//set[legend='Delete']/values");
// if found, append the new "value" node
if( $nodes->length ) {
$vNode = $dom->createElement( 'value' );
$vNodeAttr = $dom->createAttribute( 'date' );
$vNodeAttr->value = '12345';
$vNode->appendChild($vNodeAttr);
// append to "values"
$nodes->item(0)->appendChild( $vNode );
}
// i'm not saving it, just echo'ing
header( 'content-type: text/xml' );
echo $dom->saveXML();
?>
<?xml version="1.0" encoding="utf-8"?>
<report>
<sets>
<set>
<legend>Delete</legend>
<values>
<value date="2012-06-24" data="9"/>
<value date="2012-06-25" data="17"/>
<value date="2012-06-26" data="15"/>
<value date="2012-06-27" data="10"/>
<value date="2012-06-28" data="8"/>
<!--Node appended here-->
<value date="12345"/>
</values>
</set>
<set>
<legend>Total Tickets</legend>
<values>
<value date="2012-06-24" data="412"/>
<value date="2012-06-25" data="416"/>
<value date="2012-06-26" data="423"/>
<value date="2012-06-27" data="405"/>
<value date="2012-06-28" data="280"/>
</values>
</set>
</sets>
</report>
删除
总票数
PHP代码:
<?xml version="1.0" encoding="utf-8"?>
<report>
<sets>
<set>
<legend>Delete</legend>
<values>
<value date="2012-06-24" data="9"/>
<value date="2012-06-25" data="17"/>
<value date="2012-06-26" data="15"/>
<value date="2012-06-27" data="10"/>
<value date="2012-06-28" data="8"/>
</values>
</set>
<set>
<legend>Total Tickets</legend>
<values>
<value date="2012-06-24" data="412"/>
<value date="2012-06-25" data="416"/>
<value date="2012-06-26" data="423"/>
<value date="2012-06-27" data="405"/>
<value date="2012-06-28" data="280"/>
</values>
</set>
</sets>
</report>
<?php
$dom = new DomDocument( '1.0' );
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
// load the xml file
$dom->load( 'testFile.xml', LIBXML_NOBLANKS );
$xpath = new DOMXPath($dom);
// prepare the xpath query to find the "values" node corresponding the
// "Delete" legend
$nodes = $xpath->query("//set[legend='Delete']/values");
// if found, append the new "value" node
if( $nodes->length ) {
$vNode = $dom->createElement( 'value' );
$vNodeAttr = $dom->createAttribute( 'date' );
$vNodeAttr->value = '12345';
$vNode->appendChild($vNodeAttr);
// append to "values"
$nodes->item(0)->appendChild( $vNode );
}
// i'm not saving it, just echo'ing
header( 'content-type: text/xml' );
echo $dom->saveXML();
?>
<?xml version="1.0" encoding="utf-8"?>
<report>
<sets>
<set>
<legend>Delete</legend>
<values>
<value date="2012-06-24" data="9"/>
<value date="2012-06-25" data="17"/>
<value date="2012-06-26" data="15"/>
<value date="2012-06-27" data="10"/>
<value date="2012-06-28" data="8"/>
<!--Node appended here-->
<value date="12345"/>
</values>
</set>
<set>
<legend>Total Tickets</legend>
<values>
<value date="2012-06-24" data="412"/>
<value date="2012-06-25" data="416"/>
<value date="2012-06-26" data="423"/>
<value date="2012-06-27" data="405"/>
<value date="2012-06-28" data="280"/>
</values>
</set>
</sets>
</report>
最终XML文件:
<?xml version="1.0" encoding="utf-8"?>
<report>
<sets>
<set>
<legend>Delete</legend>
<values>
<value date="2012-06-24" data="9"/>
<value date="2012-06-25" data="17"/>
<value date="2012-06-26" data="15"/>
<value date="2012-06-27" data="10"/>
<value date="2012-06-28" data="8"/>
</values>
</set>
<set>
<legend>Total Tickets</legend>
<values>
<value date="2012-06-24" data="412"/>
<value date="2012-06-25" data="416"/>
<value date="2012-06-26" data="423"/>
<value date="2012-06-27" data="405"/>
<value date="2012-06-28" data="280"/>
</values>
</set>
</sets>
</report>
<?php
$dom = new DomDocument( '1.0' );
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
// load the xml file
$dom->load( 'testFile.xml', LIBXML_NOBLANKS );
$xpath = new DOMXPath($dom);
// prepare the xpath query to find the "values" node corresponding the
// "Delete" legend
$nodes = $xpath->query("//set[legend='Delete']/values");
// if found, append the new "value" node
if( $nodes->length ) {
$vNode = $dom->createElement( 'value' );
$vNodeAttr = $dom->createAttribute( 'date' );
$vNodeAttr->value = '12345';
$vNode->appendChild($vNodeAttr);
// append to "values"
$nodes->item(0)->appendChild( $vNode );
}
// i'm not saving it, just echo'ing
header( 'content-type: text/xml' );
echo $dom->saveXML();
?>
<?xml version="1.0" encoding="utf-8"?>
<report>
<sets>
<set>
<legend>Delete</legend>
<values>
<value date="2012-06-24" data="9"/>
<value date="2012-06-25" data="17"/>
<value date="2012-06-26" data="15"/>
<value date="2012-06-27" data="10"/>
<value date="2012-06-28" data="8"/>
<!--Node appended here-->
<value date="12345"/>
</values>
</set>
<set>
<legend>Total Tickets</legend>
<values>
<value date="2012-06-24" data="412"/>
<value date="2012-06-25" data="416"/>
<value date="2012-06-26" data="423"/>
<value date="2012-06-27" data="405"/>
<value date="2012-06-28" data="280"/>
</values>
</set>
</sets>
</report>
删除
总票数
希望这有帮助