【发布时间】:2013-03-09 22:56:03
【问题描述】:
我正在尝试在我的根文件夹中输出一个 xml 文件。该文件已创建,但所有元素及其内容都保存在一条直线中,如下所示:
*<?xml version="1.0" encoding="UTF-8"?> <letterA> <lemma> <word>word1</word> <textfiles>title of file</textfiles> <videofiles>video.mp3</videofiles> </lemma>
* 但我想要这样的东西:
<?xml version="1.0" encoding="UTF-8"?>
<letterA>
<lemma>
<word>song1.mp3</word>
<textfiles>title of file</textfiles>
<videofiles>video.mp3</videofiles>
</lemma>
</letterA>
这是我的代码:
<?php
/* create a dom document with encoding utf8 */
$domtree = new DOMDocument('1.0', 'UTF-8');
$domtree->preserveWhiteSpace = true;
$domtree->setIndent = (1);
/* $domtree->formatOutput = (true); */
/* create the root element of the xml tree */
$letterARoot = $domtree->createElement("letterA");
/* append it to the document created */
$letterARoot = $domtree->appendChild($letterARoot);
$alemma = $domtree->createElement("lemma");
$alemma = $letterARoot->appendChild($alemma);
/* you should enclose the following two lines in a cicle */
$alemma->appendChild($domtree->createElement('word','word1));
$alemma->appendChild($domtree->createElement('textfiles','title of file'));
$alemma->appendChild($domtree->createElement('videofiles','video.mp3'));
/* save the file in my root folder */
$domtree->save("firstFile.xml") or die("Error");
/* get the xml printed */
/* echo $domtree->saveXML(); */
?>
如果有人可以提供帮助,我将不胜感激。正如你所看到的,我使用了 'preserveWhiteSpace' 和 'setIndent' 但效果不佳。我也尝试过再次使用'formatOutput'。我担心的不是我的 xml 在浏览器上的外观,而是它在实际文件中的外观(即上面示例中的 firstFile.xml)。 提前谢谢。
【问题讨论】:
-
你为什么要费心缩进 XML?任何人都可以使用适当的 XML 阅读器将 xml 格式化为做得很好的层次结构节点。
-
$domtree->setIndent是一个谎言。您只需向仅带有值的类添加一个公共属性。如果您想更改缩进,您可以在之后使用此处概述的正则表达式:Converting indentation with preg_replace (no callback) -
thanx @harke,我之前读过那篇文章,但这同样适用于浏览器级别,但不适用于我的实际 xml 文件..
-
刚刚阅读了您的第二条评论,所以您的意思是,在创建文件时无法对其进行格式化,我必须稍后使用正则表达式处理我的文件.我说的对吗?
-
@entropy:就更改用于缩进的字符而言,是的。由 DomDocument 完成每个级别缩进两个空格的 XML 格式(如重复问题中所述)。