この問題は主にDOMをどのようにナビゲートするかに関係しますが、RegExpにも問題があります。 XPathは、実際にはDOM操作に関して多くの柔軟性を提供します。それが私の好みの解決策です。あなたが特にXPathの中'/div/text()'
とその<div>
のテキストノードをターゲットにすることができ
$dom = new DOMDocument('1.0', 'utf-8');
$xpath = new DOMXPath($dom);
$node = $dom->createElement('div');
$node->appendChild(
$dom->createElement('h1', "Home")
);
$node->appendChild(
$dom->createTextNode("test{{test}}")
);
$dom->appendChild($node);
:あなたはDOMDocumentオブジェクトを持っていると仮定すると
は、この(私はXPathを添付しました)のように構築されました。
ので、ノードの残りの部分を破壊することなく、テキストノード内{{test}}
を置き換えるために、あなたはどうなる:
$xpath->query('/div/text()')->item(0)->nodeValue = preg_replace(
'/(.*){{[^}]+}}/m',
'$1',
$xpath->query('/div/text()')->item(0)->nodeValue
);
やや複雑しかし$dom->saveXML();
からの出力は次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<div><h1>Home</h1>test</div>
{{test}}
はされています残りの部分はそのまま残す。
現在のところDOMElementノードしか使用できません。domまたはxpathは使用できません。または私は同様にxpathとして子供を読み込む必要があります。 – SheperdOfFire
"ルートノード"を "作成"したDOMDocumentにノードをロードするだけで、元の要素を操作したときに元の要素を抽出することができます。 – CD001