使用DOm和PHP为现有的XML文档添加节点
问题描述:
我希望有人能帮助,因为这会让我疯狂。使用DOm和PHP为现有的XML文档添加节点
我需要使用PHP更新现有的XML文件。如果其中一个节点中的值等于某个值,那么我想添加一个新的子元素并在其中包含一些文本。
下面是XML文件的例子:
<properties>
<property>
<address>
<street>Example Road</street>
<locality>Fitzrovia</locality>
<town>London</town>
<postcode>NW1</postcode>
</address>
</property>
<property>
<address>
<street>Default Street</street>
<locality>Sample</locality>
<town>London</town>
<postcode>EC1</postcode>
</address>
</property>
</properties>
这是我目前所面对的PHP:
$dom = new DOMDocument();
$dom->load('http://example.com/example.xml');
$xpath = new DOMXPath($dom);
$postcode = $xpath->query('property/address/postcode');
foreach($postcode as $region)
{
$r = $region->nodeValue;
if (preg_match('/^nw(?=[0-9]*)/i', $r)) {
$region->nodeValue = 'North West London';
}
else if (preg_match('/^n(?=[0-9]*)/i', $r)) {
$region->nodeValue = 'North London';
}
else if (preg_match('/^e(?=[0-9]*)/i', $r)) {
$region->nodeValue = 'East London';
}
else if (preg_match('/^se(?=[0-9]*)/i', $r)) {
$region->nodeValue = 'South East London';
}
else if (preg_match('/^sw(?=[0-9]*)/i', $r)) {
$region->nodeValue = 'South West London';
}
else if (preg_match('/^w(?=[0-9]*)/i', $r)) {
$region->nodeValue = 'West London';
}
else if (preg_match('/^ec(?=[0-9]*)/i', $r)) {
$region->nodeValue = 'East Central London';
}
else if (preg_match('/^wc(?=[0-9]*)/i', $r)) {
$region->nodeValue = 'West Central London';
}
else {
$region->nodeValue = 'Outer London';
}
}
$dom->save('export.xml');
我所要做的,是如果邮政编码等于特定值,那么一个新的子节点将被添加到带有一些文本的'地址'节点。
我遇到了一些问题,我可以得到一个新的子节点生成,但它会增加很多,所有只在XML文件的一部分,而不是每个'属性'内的一个isntance,节点。
我希望这是有道理的,因为我真的可以做一些援助。
感谢提前:)
答
您应该使用DOMDocument::createElement创建一个新的节点,并DOMNode::appendChild追加新的节点。
实施例:
if (preg_match('/^nw(?=[0-9]*)/i', $r)) {
$element = $dom->createElement('your_node_name', 'North West London');
$region->parentNode->appendChild($element);
}
感谢您的响应@akkie。我一直在尝试,但它一直出错。我最终将所有新节点都集中在XML文件中,而不是每个节点都添加到“属性/属性/地址”节点。任何想法,我可能会出错? – DL1984 2013-03-22 13:35:02
我在我的答案中添加了一个示例。 – akkie 2013-03-22 14:27:57
谢谢@akkie。我现在就试试这个。 – DL1984 2013-03-22 14:43:15