基本的に、DOM を使用して PHP でこれを実現できます。
次のような文字列の XML 形式が与えられます。
$xml = <<<EOX
<root>
<eerste_kwartier>naam leeg</eerste_kwartier>
<eerste_kwartier>leeg leeg</eerste_kwartier>
</root>
EOX;
次のことができます。
1 - PHP と DOM を使用する
DOM を使用すると、getElementsByTagName() メソッドで同じタグ名を持つ要素のリストを取得し、そのリストを調べて、好みのテキスト変換を適用できます。
例:
// Load source XML
$xmlObj = new DOMDocument("1.0", "UTF-8");
$xmlObj->loadXML($xml);
// Obtain interesting nodes into a node list object
$nodeList = $xmlObj->getElementsByTagName('eerste_kwartier');
// Prepare destination XML object
$xmlObjResult = new DOMDocument("1.0", "UTF-8");
$rootElement = $xmlObjResult->createElement("root");
// Walk node list
for ($i = 0; $i < $nodeList->length; $i++) {
$tmp = $nodeList->item($i)->nodeValue;
// Use regular expressions for greater flexibility in selecting text to replace
$tmp = preg_replace('/naam/', 'leeg', $tmp);
// Prepare destination element
$eerste_kwartier = $xmlObjResult->createElement("eerste_kwartier");
$cdata = $xmlObjResult->createCDATASection($tmp);
$eerste_kwartier->appendChild($cdata);
$rootElement->appendChild($eerste_kwartier);
}
// Append root element to the document
$xmlObjResult->appendChild($rootElement);
// Enjoy your XML
echo $xmlObjResult->saveXML();
2 - PHP と DOMXPath を使用する
上記の例は、DOM の getElementsByTagName() の代わりに XPath の query() を使用するように簡単に変更できます。
したがって、次のようにします。
// Load source XML
$xmlObj = new DOMDocument("1.0", "UTF-8");
$xmlObj->loadXML($xml);
// Obtain interesting nodes into a node list object
$xpath = new DOMXPath($xmlObj);
$nodeList = $xpath->query("//eerste_kwartier");
// Prepare destination XML object
$xmlObjResult = new DOMDocument("1.0", "UTF-8");
$rootElement = $xmlObjResult->createElement("root");
// Walk node list
for ($i = 0; $i < $nodeList->length; $i++) {
$tmp = $nodeList->item($i)->nodeValue;
// Use regular expressions for greater flexibility in selecting text to replace
$tmp = preg_replace('/naam/', 'leeg', $tmp);
// Prepare destination element
$eerste_kwartier = $xmlObjResult->createElement("eerste_kwartier");
$cdata = $xmlObjResult->createCDATASection($tmp);
$eerste_kwartier->appendChild($cdata);
$rootElement->appendChild($eerste_kwartier);
}
// Append root element to the document
$xmlObjResult->appendChild($rootElement);
// Enjoy your XML
echo $xmlObjResult->saveXML();
結論
お気づきのとおり、2 つのオプションは非常に似ています。
ドキュメント内の検索が同じタグ名の検索に解決される場合は、オプション 1 を使用することをお勧めします。XPath には複雑な XML 検索に対抗するための優れた武器がたくさんあるため、検索をそれよりも少しでも明確にする必要がある場合は、オプション 2 をお勧めします (XPath の簡単な紹介はここにありますが、利用可能な資料はたくさんあります。ぐるぐる回る)。
コンテンツのより高いスケールと明確な変換を適用する必要がない限り、私は XSL を理解することはしませんが、念のために:食欲をそそります)。