[英]How to remove empty nodes from XML in PHP
我正在提交表單(經過一些驗證)並像這樣編譯一些xml:
$sxe = new SimpleXMLElement($xmlstr);
$MyFirstNode = $sxe->addChild('MyFirstNode', $_POST["MyTitle"]);
$MySecondNode = $sxe->addChild('MySecondNode');
$MyTHIRDNode = $MySecondNode->addChild('MyTHIRDNode', $_POST["FormElementName"]);
之后,我將使用以下代碼將xml寫入文檔中;
$myFile = "myfilename.xml";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $sxe->asXML());
fclose($fh);
在一種情況下,我需要生成包含任何空節點的XML。 因此,在上面的示例中,如果FormElementName
為空,那就很好了(生成類似<MyTHIRDNode></MyTHIRDNode>
但是,在另一種情況下,我需要刪除所有這些空節點,所以我剩下的是那些包含某種數據的節點:
<node>
<one>Hello</one>
<two></two> // <- Empty
<three>World!</three>
</node>
// Becomes...
<node>
<one>Hello</one>
<three>World!</three>
</node>
我有一個if語句准備區分兩種情況:
if ($_POST["operation"] == "UPDATE") {
//do something
}
但是,我不確定如何遍歷“ $ sxe”並刪除這些空節點。
任何幫助深表感謝 :)
如果(感到懶惰)這樣做:
$xmlsz = $xml->asXML(); // Get XML code from your SXE
// Keep retrying as some empty nodes may contain other empty nodes
while(true){
$xmlsz_ref = $xmlsz; // keep old version as reference
// Remove <node></node> empty nodes
$xmlsz = preg_replace('~<[^\\s>]+>\\s*</\\1>~si', null, $xmlsz);
// Remove <node /> empty nodes
$xmlsz = preg_replace('~<[^\\s>]+\\s*/>~si', null, $xmlsz);
if($xmlsz_ref === $xmlsz) break; // If not changed, break!
}
$xmlsz = simplexml_load_string($xmlsz); // reparse XML code to your SEX
代碼是在這里編寫的,未經測試。 應該管用!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.