domDocumentに最初の行を削除するオプションはありますか?
<?xml version="1.0" encoding="UTF-8"?>
クラスのインスタンス化は自動的にそれを出力に追加しますが、それを取り除くことは可能ですか?
HTMLを出力する場合は、saveHTML()
関数を使用します。多くのXMLイディオムを自動的に回避し、閉じた/閉じていないHTMLイディオムを適切に処理します。
XMLを出力する場合は、DOMDocument
がDOMNode
(つまり、XPath式では '/')であるという事実を使用できるため、DOMNode
API呼び出しを使用できます。子ノードを反復処理し、各子ノードでsaveXML()
を呼び出します。これはXML宣言を出力せず、他のすべてのXMLコンテンツを適切に出力します。
例:
$xml = get_my_document_object();
foreach ($xml->childNodes as $node) {
echo $xml->saveXML($node);
}
DOMDocumentの使用は、有効なXMLファイルのユニバーサルソリューションだと思います。
Xmlがすでに変数にロードされている場合:
$t_xml = new DOMDocument();
$t_xml->loadXML($xml_as_string);
$xml_out = $t_xml->saveXML($t_xml->documentElement);
ディスクからのXMLファイルの場合:
$t_xml = new DOMDocument();
$t_xml->load($file_path_to_xml);
$xml_out = $t_xml->saveXML($t_xml->documentElement);
このコメントは役に立ちました: http://www.php.net/manual/en/domdocument.savexml.php#88525
出力バッファリングを使用して削除できます。少しハックしますが、機能します。
ob_start();
// dom stuff
$output = ob_get_contents();
ob_end_clean();
$clean = preg_replace("/(.+?\n)/","",$output);
私にとって、上記の答えはどれもうまくいきませんでした:
$dom = new \DOMDocument();
$dom->loadXXX('<?xml encoding="utf-8" ?>' . $content); // loadXML or loadHTML
$dom->saveXML($dom->documentElement);
部分的なHTMLがある場合、上記は機能しませんでした。
<p>Lorem</p>
<p>Ipsum</p>
その後、<p>Lorem</p>
以降のすべてを削除しました。
私のために働いた唯一の解決策は:
foreach ($doc->childNodes as $xx) {
if ($xx instanceof \DOMProcessingInstruction) {
$xx->parentNode->removeChild($xx);
}
}