如何获得由PHP生成的XML缩进格式?
我正在尝试从PHP生成带有特定缩进的XML文件,如下所示:
我尝试模仿的模型:
<?xml version="1.0" encoding="UTF-8"?>
<sound
firmwareVersion="3.0.1"
earliestCompatibleFirmware="3.0.0"
polyphonic="mono"
voicePriority="1"
mode="subtractive"
lpfMode="24dB"
modFXType="none">
<osc1
type="saw"
transpose="0"
cents="0"
retrigPhase="-1" />
<osc2
type="square"
transpose="-22"
cents="0"
retrigPhase="-1" />
因此,我使用了SimpleXML + prettyXML,我可以为元素而不是属性获得格式良好的格式。我四处张望,找不到用SimpleXML或DOMDocument打破属性界线的方法。
我的带有SimpleXML的代码如下:
$xml_header = '<?xml version="1.0" encoding="UTF-8"?><sound></sound>';
$sound = new SimpleXMLElement($xml_header);
$sound->addAttribute('firmwareVersion', "3.0.1");
$sound->addAttribute('earliestCompatibleFirmware', "3.0.0");
$sound->addAttribute('polyphonic', "$polyphonic");
$sound->addAttribute('voicePriority', "1");
$sound->addAttribute('mode', "substractive");
$sound->addAttribute('lpfMode', "$lpfmode");
$sound->addAttribute('modFXType', "$modFXType");
$osc1 = $sound->addChild('osc1');
$osc1->addAttribute('type', "$osc1type");
$osc1->addAttribute('transpose', "$osc1transpose");
$osc1->addAttribute('cents', "$osc1cents");
$osc1->addAttribute('retrigPhase', "-1");
$osc2 = $sound->addChild('osc2');
$osc2->addAttribute('type', "$osc2type");
$osc2->addAttribute('transpose', "$osc2transpose");
$osc2->addAttribute('cents', "$osc2cents");
$osc2->addAttribute('retrigPhase', "-1");
$lecho = $sound->saveXML();
而且我对DomDocument的尝试看起来像这样:
$domtree = new DOMDocument('1.0', 'UTF-8');
$sound = $domtree->appendChild($domtree->createElement("sound"));
$firmwareVersion = $domtree->createAttribute('firmwareVersion');
$firmwareVersion->value = '3.0.1';
$sound->appendChild($firmwareVersion);
$earliestCompatibleFirmware = $domtree->createAttribute('earliestCompatibleFirmware');
$earliestCompatibleFirmware->value = '3.0.0';
$sound->appendChild($earliestCompatibleFirmware);
$osc1 = $sound->appendChild($domtree->createElement("osc1"));
$osc1Attributes = $domtree->createAttribute('type');
$osc1Attributes->value = 'square';
$osc1->appendChild($osc1Attributes);
结果总是看起来像下面,我知道可以用,但是对于普通读者来说是难以理解的,并且与原始文档不符。我确实希望能够在属性中插入换行符,但找不到方法。我试图将reserveWhiteSpace = false;和formatOutput = true;使用PrettyXML库在任何地方都没有用。
我得到了什么(osc1和osc2元素已正确缩进,但我是菜鸟,无法在此处显示此内容:]
<sound firmwareVersion="3.0.1" earliestCompatibleFirmware="3.0.0" polyphonic="mono" voicePriority="1" mode="substractive" lpfMode="24dB" modFXType="chorus" airtime-extension-installed="true">
<osc1 type="saw" transpose="0" cents="0" retrigPhase="-1"/>
<osc2 type="square" transpose="-22" cents="0" retrigPhase="-1"/>
任何帮助将不胜感激。简介:我能够获取元素的缩进,但不能获取属性。这主要是我需要实现的一个装饰性目标:D
您可以使用ext/tidy或实现自己的序列化(遍历DOM并生成XML字符串)。