2008-11-03 51 views
3

我建設與PHP的SimpleXML擴展的XML文檔,我加入一個令牌文件:在SimpleXML for PHP中關閉自閉標籤?

$doc->addChild('myToken'); 

這會產生(我是知道的)一個自閉或單個標籤:

<myToken/> 

不過,我有被絆倒各地自閉標籤通信老化Web服務,所以我需要有一個單獨的打開和關閉標籤:

<myToken></myToken> 

現在的問題是,除了通過preg_replace運行生成的XML之外,我該如何做到這一點?

回答

4

SimpleXMLElement->__constructLibXML Predefined Constants的文件,我想這應該工作:

<?php 
$sxe = new SimpleXMLElement($someData, LIBXML_NOEMPTYTAG); 

// some processing here 

$out = $sxe->asXML(); 
?> 

試一下,看看它是否工作。否則,恐怕它是preg_replace-land。

+0

或者只是手工編碼。 – 2008-11-03 20:07:37

1

目前,無法避免使用LibXML自我關閉標籤。一個由@Piskvor所提出的解決方案是行不通的:

LIBXML_NOEMPTYTAG不simplexml的工作,作爲mentionned here

This option is currently just available in the DOMDocument::save and DOMDocument::saveXML functions. 

一種解決方法是將要使用的答案從this question

+0

這似乎是對現有答案的迴應,而不是問題的答案,所以應在該答案下添加爲註釋。 – IMSoP 2014-07-30 12:10:32

1

如果您將值設置爲空(即空,空字符串),它將使用打開/關閉括號。

$tag = '<SomeTagName/>'; 

echo "Tag: '$tag'\n\n"; 

$x = new SimpleXMLElement($tag); 
echo "Autoclosed: {$x->asXML()}\n"; 

$x = new SimpleXMLElement($tag); 
$x[0] = null; 
echo "Null: {$x->asXML()}\n"; 

$x = new SimpleXMLElement($tag); 
$x[0] = ''; 
echo "Empty: {$x->asXML()}\n"; 

見例如:http://sandbox.onlinephpfunctions.com/code/10642a84dca5a50eba882a347f152fc480bc47b5

0

可能不是最好的解決辦法,但得到了同樣的問題,用pre_replace全部自行閉合的標籤更改爲完整的形式解決它......

$xml_reader = new XMLReader; 
$xml_reader->open($xml_file); 

$data = preg_replace('/\<(\w+)\s*\/\s*\>/i', '<$1></$1>', $xml_reader->readOuterXML());