0
我寫了一個小幫手函數來用xpath進行基本的搜索替換,因爲我發現它很容易編寫很短的操作,同時很容易閱讀和理解。php xml generation with xpath
代碼:
<?php
function xml_search_replace($dom, $search_replace_rules) {
if (!is_array($search_replace_rules)) {
return;
}
$xp = new DOMXPath($dom);
foreach ($search_replace_rules as $search_pattern => $replacement) {
foreach ($xp->query($search_pattern) as $node) {
$node->nodeValue = $replacement;
}
}
}
的問題是,現在我需要在XML DOM的不同部位做不同的「查找/替換」。我曾希望像下面的東西可以工作,但DOMXPath不能使用DOMDocumentFragment :(
下面的例子的第一部分(直到foreach循環)像一個魅力。我正在尋找替代靈感路要走周圍這仍然是短期和可讀(不得多鍋爐板)
代碼:
<?php
$dom = new DOMDocument;
$dom->loadXml(file_get_contents('container.xml'));
$payload = $dom->getElementsByTagName('Payload')->item(0);
xml_search_replace($dom, array('//MessageReference' => 'SRV4-ID00000000001'));
$payloadXmlTemplate = file_get_contents('payload_template.xml');
foreach (array(array('id' => 'some_id_1'),
array('id' => 'some_id_2')) as $request) {
$fragment = $dom->createDocumentFragment();
$fragment->appendXML($payloadXmlTemplate);
xml_search_replace($fragment, array('//PayloadElement' => $request['id']));
$payload->appendChild($fragment);
}
這不是一個真正的問題。也許它更適合[codereview](http://codereview.stackexchange.com)。我不確定你爲什麼需要這裏的文檔片段。如果你想爲你的查詢定義一個上下文,['query'需要一個上下文節點參數](http://php.net/manual/en/domxpath.query.php)。 –
我不知道codereview對不起......但你的建議正是我所尋找的洞察力。從來沒有真正在PHP中使用XML,並且新類的數量有點過大。如果你把它作爲答案,我會選擇。 – Jacob