gpt4 book ai didi

PHP DOM XML - 创建多个命名空间属性?

转载 作者:可可西里 更新时间:2023-11-01 12:42:41 24 4
gpt4 key购买 nike

我正在使用一些 PHP 来使用 DOM 扩展从数据库创建 XML。

基本上,我需要创建一个 NameSpace 并向其添加 3 个属性:

<NameSpaceName xmlns="uri:xxx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="uri:xxx">

我写的完整代码如下:

include_once("includes/connect.php");

$sql = ("SELECT * FROM tableName");
$query = mysql_query($sql) or die("Error: " . mysql_error());


// create a new XML document
$doc = new DomDocument('1.0', 'UTF-8');

// create root node
$root = $doc->createElementNS('uri:xxx', 'PayerRecords');
$root = $doc->appendChild($root);
$root->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
$root->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xsi:schemaLocation', 'uri:xxx');

// process one row at a time
while($row = mysql_fetch_assoc($query)) {

// add node for each row
$occ = $doc->createElement('Content');
$occ = $root->appendChild($occ);

// add a child node for each field
foreach ($row as $fieldname => $fieldvalue) {

$child = $doc->createElement($fieldname);
$child = $occ->appendChild($child);

$value = $doc->createTextNode($fieldvalue);
$value = $child->appendChild($value);

} // foreach

} // while

// get completed xml document
$xml_string = $doc->saveXML();

echo $xml_string;

但是当我执行上面的命令时,我得到了这个错误:

Fatal error: Uncaught exception 'DOMException' with message 'Namespace Error' in xml.php:21 Stack trace: #0 xml.php(21): DOMElement->setAttributeNS('http://www.w3.o...', 'xsi:schemaLocat...', 'uri:xxx...') #1 {main} thrown in xml.php on line 21

第 21 行是第二个“setAttributeNS”行。

谁能看出我哪里出错了?

最佳答案

schemaLocation 未在命名空间 http://www.w3.org/2000/xmlns/ 中声明,但在 http://www.w3.org/2001/XMLSchema-实例

<?php
// create a new XML document
$doc = new DomDocument('1.0', 'UTF-8');
// create root node
$root = $doc->createElementNS('http://xxx', 'PayerRecords');
$root = $doc->appendChild($root);
$root->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
$root->setAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'schemaLocation', 'http://xxx');

echo $doc->savexml();

打印

<?xml version="1.0" encoding="UTF-8"?>
<PayerRecords xmlns="http://xxx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xxx"/>

关于PHP DOM XML - 创建多个命名空间属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2236931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com