これは、既存のXMLファイルまたは文字列をDOMDocumentオブジェクトにロードする私のコードです。
$doc = new DOMDocument();
$doc->formatOutput = true;
// the content actually comes from an external file
$doc->loadXML('<rss version="2.0">
<channel>
<title></title>
<description></description>
<link></link>
</channel>
</rss>');
$doc->getElementsByTagName("title")->item(0)->appendChild($doc->createTextNode($titleText));
$doc->getElementsByTagName("description")->item(0)->appendChild($doc->createTextNode($descriptionText));
$doc->getElementsByTagName("link")->item(0)->appendChild($doc->createTextNode($linkText));
タイトル、説明、リンクタグ内の値を上書きする必要があります。上記のコードの最後の3行は、私の試みです。ノードが空でない場合、テキストは既存のコンテンツに「追加」されます。ノードのテキストコンテンツを空にして、新しいテキストを1行に追加するにはどうすればよいですか。
セットする - DOMNode::$nodeValue
代わりに:
$doc->getElementsByTagName("title")->item(0)->nodeValue = $titleText;
$doc->getElementsByTagName("description")->item(0)->nodeValue = $descriptionText;
$doc->getElementsByTagName("link")->item(0)->nodeValue = $linkText;
これにより、既存のコンテンツが新しい値で上書きされます。
doub1ejackが言及したように
$doc->getElementsByTagName("title")->item(0)->nodeValue = $titleText;
_$titleText = "& is not allowed in Node::nodeValue";
_の場合はエラーになります
したがって、より良い解決策は
// clear the existing text content $doc->getElementsByTagName("title")->item(0)->nodeValue = "";
// then create new TextNode $doc->getElementsByTagName("title")->item(0)->appendChild($doc->createTextNode($titleText));