新しいノードをXMLドキュメントに挿入しようとしています。私は構文解析のほとんどのためにsimpleXMLを使用していますが、私はDOMを使用する必要があります。DOMを使用して新しい行を挿入する
$meta2 = new SimpleXMLElement("<meta/>");
$meta2->addAttribute('name', 'subject');
$meta2->addAttribute('value', $doc_id);
$target = current($my_xml->xpath('//meta[last()]'));
simplexml_insert_after($my_xml, $meta2, $target);
私の問題は、すぐにターゲットした後ではなく、新規にその新しいノードを挿入することである:これは私が加え
function simplexml_insert_after(SimpleXMLElement $sxe, SimpleXMLElement $insert, SimpleXMLElement $target)
{
$target_dom = dom_import_simplexml($target);
$target_dom->formatOutput = true;
$target_dom->preserveWhiteSpace = false;
$insert_dom = $target_dom->ownerDocument->importNode(dom_import_simplexml($insert), true);
if ($target_dom->nextSibling) {
return $target_dom->parentNode->insertBefore($insert_dom, $target_dom->nextSibling);
} else {
return $target_dom->parentNode->appendChild($insert_dom);
}
}
そして、このようにそれを呼び出す作るために使用している機能です結果のXMLので、行は次のようになります。
:<meta content="a" name="ap-category"/>
<meta content="bx" name="ap-format"/><meta name="subject" value="urn:blah"/>
私はこのように見えるし、それを希望する場合
私はpreserveWhiteSpaceをtrueに変更しようとしましたが、それは役に立ちませんでした。そのノードを挿入する前に新しい行を追加するにはどうすればよいですか?
function simplexml_insert_after(SimpleXMLElement $sxe, SimpleXMLElement $insert,SimpleXMLElement $target)
{
$target_dom = dom_import_simplexml($target);
$target_dom->formatOutput = true;
$target_dom->preserveWhiteSpace = false;
$insert_dom = $target_dom->ownerDocument->importNode(dom_import_simplexml($insert), true);
if ($target_dom->nextSibling) {
$result = $target_dom->parentNode->insertBefore($insert_dom, $target_dom->nextSibling);
$target_dom->parentNode->insertBefore($target_dom->ownerDocument->createTextNode("\n"), $result);
return $result
} else {
return $target_dom->parentNode->appendChild($insert_dom);
}
}
感謝SimpleXMLElementクラスのオブジェクトでなければなりません。 'DOMElement :: createTextNode()'を呼び出す – Mulberry
$ target_dom-> ownerDocument-> createTextNode( "\ n")を試してみてください。これは正しいトラックにあると思いますが、 )、createTextNodeはDomDocumentメソッドです(私は今のところPHPを手に入れておらず、自分で試すことはできません) – Eineki
あなたはそれを修正しました。私はまだDOMの新しいですが、私はそれをキャッチしていたはずです。再度、感謝します! – Mulberry