PHP DOM XML - 创建多个命名空间属性? [英] PHP DOM XML - Create Multiple Namespace Attributes?

查看:89
本文介绍了PHP DOM XML - 创建多个命名空间属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm working on some PHP to create XML from a database using the DOM extension.

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

Basically, I need to create a NameSpace and add 3 attributes to it:

<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;

但是当我执行上面我得到这个错误:

But when I execute the above I get this error:


致命错误:未捕获的异常
'DOMException'与$'
中的消息'命名空间
错误$ b xml.php:21
堆栈跟踪:#0
xml.php(21):
DOMElement-> setAttributeNS(' http:// www .w3.o ...','xsi:schemaLocat ...',
'uri:xxx ...')#1 {main}在
中抛出
第21行的xml.php

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行。

Line 21 is the second 'setAttributeNS' line.

任何人都可以看到我在哪里出错?

Can anyone see where i'm going wrong?

推荐答案

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

schemaLocation is not declared in the namespace http://www.w3.org/2000/xmlns/ but in http://www.w3.org/2001/XMLSchema-instance

<?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 - 创建多个命名空间属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆