使用php替换xml中的特定节点值 [英] Replace specific node value in xml using php
问题描述
我正在解析多个xml提要,并合并为一个,对我来说还可以,但是现在我有点卡住了,因为我需要在特定的节点值中添加一些前缀,这意味着我需要更改的值。该节点。在这里,我提供了一些我想要的实际示例代码。
Hi i am parsing multiple xml feed and combine into one and its working fine for me but now i am bit of stuck at one point because i need to add some prefix into specific node value i mean i need to change the value of that node. here i am providing some example code what actual i want.
XML
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<JobId>45982</JobId>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate2</Brand>
<JobId>45983</JobId>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate3</Brand>
<JobId>45984</JobId>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent3</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
在上面的xml中,我想附加像这样的前缀< JobId> ; 0-45984< / JobId>
In the above xml i want to append the prefix like this <JobId>0-45984</JobId>
这是 php代码,它将不同的xml提要合并为一个如上所示。
Here is the php code which combine different xml feed into one give out put as above.
<?php
$feed1 = "data1.xml";
$feed2 = "data2.xml";
$feed3 = "data3.xml";
$xml1 = new DOMDocument('1.0', 'UTF-8');
$xml1->load($feed1);
$xml2 = new DOMDocument('1.0', 'UTF-8');
$xml2->load($feed2);
$xml3 = new DOMDocument('1.0', 'UTF-8');
$xml3->load($feed3);
$addXml = array();
$addXml[] = $xml1->saveXML();
$addXml[] = $xml2->saveXML();
$addXml[] = $xml3->saveXML();
// create a new document
$dom = new DOMDocument();
$dom->appendChild($dom->createElement('JobRecords'));
foreach ($addXml as $xml) {
$addDom = new DOMDocument();
$addDom->loadXml($xml);
if ($addDom->documentElement) {
foreach ($addDom->documentElement->childNodes as $node) {
$dom->documentElement->appendChild(
$dom->importNode($node, TRUE)
);
}
}
}
$xmlFinal = $dom->saveXml();
echo $xmlFinal;
?>
到目前为止,我已经尝试过但没有成功,请告诉我如何实现此目标。
预先感谢,并表示感谢。
I have tried so far but didn't succeed Please advise me how to achieve this.
Thanks in advance and much appreciated.
推荐答案
您可以从root进行迭代,然后像下面那样检查并替换节点。这里 $ xmlData
保存您的xml字符串。
You could iterate from root and check and replace the node like following. Here $xmlData
holds the string of your xml.
$dom = new DOMDocument();
$dom->loadXML($xmlData);
foreach ($dom->documentElement->childNodes as $node) {
//print_r($node);
if($node->nodeType==1){
$OldJobId = $node->getElementsByTagName('JobId')->Item(0);
$newelement = $dom->createElement('JobId','0-'.$OldJobId->nodeValue);
$OldJobId->parentNode->replaceChild($newelement, $OldJobId);
}
}
$str = $dom->saveXML($dom->documentElement);
echo $str;
您可以找到有效的演示此处
You can find working demo here
这篇关于使用php替换xml中的特定节点值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!