【问题标题】:Create proper XML format with php使用 php 创建正确的 XML 格式
【发布时间】:2016-07-20 13:39:34
【问题描述】:

我创建 xml 文件的尝试已接近完成,但我有一两个障碍。

通过 mysql_connect() 从数据库中提取数据

$sql = "SELECT `entity_id`,`name` FROM `table`

想要的输出是:

<?xml version="1.0" encoding="utf-8"?>
<content>
    <item>
        <id>1</id>
        <name><![CDATA[name1]]</name>
    </item>
    <item>
        <id>2</id>
        <name><![CDATA[name2]]</name>
    </item>
</content>

现在我一直在尝试通过 DOMDocument 执行此操作,但我无法正确缩进

$doc = new DOMDocument( '1.0', 'utf-8' );
$ele = $doc->createElement( 'content' );

    while ($row = mysql_fetch_assoc($res)) {

    $ele = $doc->createElement( 'id' );
    $ele->nodeValue = $row['entity_id'];
    $doc->appendChild( $ele );

    $ele = $doc->createElement( 'name' );
    $ele->nodeValue = $row['name'];
    $doc->appendChild( $ele );

    };

$doc->appendChild( $ele );
$doc->save('MyXmlFile.xml');

但是这个输出:

<?xml version="1.0" encoding="utf-8"?>
    <id>1</id>
    <name>name1</name>
    <id>2</id>
    <name>name2</name>

如何将结果放到子级别? (主要问题)然后我必须弄清楚如何在文本数据周围包装 CDATA 标记?

【问题讨论】:

标签: php xml domdocument


【解决方案1】:

确实通过 XMLWriter 路线解决了这个问题:

$xml = new XMLWriter();

$xml->openURI('myxmlfile.xml');
$xml->startDocument('1.0', 'utf-8');
$xml->setIndent(true);
$xml->startElement('content');

while ($row = mysql_fetch_assoc($res)) {

    $xml->startElement('item');

        $xml->startElement("id");
        $xml->writeRaw("$row['entity_id']);
        $xml->endElement();

        $xml->startElement("name");
        $xml->writeCData(utf8_encode ($row['name']));
        $xml->endElement();

    $xml->endElement();
    }

$xml->endElement();

$xml->flush();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2012-10-30
    • 2011-01-01
    • 2017-01-19
    • 2016-08-31
    • 2021-02-19
    • 2016-07-19
    相关资源
    最近更新 更多